From fc5adf70ff3e259f5f4beddb4d379e3339dd4bc8 Mon Sep 17 00:00:00 2001 From: Kangho Hur Date: Wed, 29 Jul 2020 14:29:33 +0900 Subject: [PATCH] Adds Tizen backends --- MaterialDesignControls.nuspec | 13 +- README.md | 7 + .../CustomPageRenderer.cs | 18 ++ .../ExampleMaterialDesignControls.Tizen.cs | 21 ++ ...ExampleMaterialDesignControls.Tizen.csproj | 31 ++ .../res/arrow_drop_down.png | Bin 0 -> 103 bytes .../res/calendar.png | Bin 0 -> 132 bytes .../res/cancel.png | Bin 0 -> 297 bytes .../res/color.png | Bin 0 -> 275 bytes .../res/delete.png | Bin 0 -> 123 bytes .../res/email.png | Bin 0 -> 203 bytes .../res/save.png | Bin 0 -> 160 bytes .../res/showPassword.png | Bin 0 -> 283 bytes .../ExampleMaterialDesignControls.Tizen.png | Bin 0 -> 10097 bytes .../tizen-manifest.xml | 16 + example/ExampleMaterialDesignControls.sln | 251 +++++++++++---- .../ViewModels/MaterialChipViewModel.cs | 2 +- src/MaterialDesignControls.Tizen/Effects.cs | 21 ++ .../Effects/TouchAndPressEffect.cs | 66 ++++ .../MaterialDesignControls.Tizen.csproj | 16 + src/MaterialDesignControls.Tizen/Renderers.cs | 17 + .../Renderers/CustomFrameRenderer.cs | 114 +++++++ .../Renderers/MaterialDatePickerRenderer.cs | 177 +++++++++++ .../Renderers/MaterialDoublePickerRenderer.cs | 295 ++++++++++++++++++ .../Renderers/MaterialEditorRenderer.cs | 15 + .../Renderers/MaterialEntryRenderer.cs | 37 +++ .../Renderers/MaterialLabelRenderer.cs | 14 + .../Renderers/MaterialPickerRenderer.cs | 215 +++++++++++++ .../Renderers/MaterialTimePickerRenderer.cs | 187 +++++++++++ .../Utils/TextAlignmentHelper.cs | 23 ++ src/MaterialDesignControls.sln | 74 +++-- .../Controls/MaterialButton.cs | 3 + .../Controls/MaterialChips.xaml.cs | 3 + .../Controls/MaterialChipsGroup.xaml.cs | 4 +- .../Controls/MaterialDatePicker.xaml.cs | 3 + .../Controls/MaterialDoublePicker.xaml.cs | 3 + .../Controls/MaterialEditor.xaml.cs | 3 + .../Controls/MaterialEntry.xaml.cs | 3 + .../Controls/MaterialField.cs | 3 + .../Controls/MaterialPicker.xaml.cs | 3 + .../Controls/MaterialSelection.xaml.cs | 3 + .../Controls/MaterialTimePicker.xaml.cs | 3 + 42 files changed, 1562 insertions(+), 102 deletions(-) create mode 100644 example/ExampleMaterialDesignControls.Tizen/CustomPageRenderer.cs create mode 100644 example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.cs create mode 100644 example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.csproj create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/arrow_drop_down.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/calendar.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/cancel.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/color.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/delete.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/email.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/save.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/res/showPassword.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/shared/res/ExampleMaterialDesignControls.Tizen.png create mode 100644 example/ExampleMaterialDesignControls.Tizen/tizen-manifest.xml create mode 100644 src/MaterialDesignControls.Tizen/Effects.cs create mode 100644 src/MaterialDesignControls.Tizen/Effects/TouchAndPressEffect.cs create mode 100644 src/MaterialDesignControls.Tizen/MaterialDesignControls.Tizen.csproj create mode 100644 src/MaterialDesignControls.Tizen/Renderers.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/CustomFrameRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/MaterialDatePickerRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/MaterialDoublePickerRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/MaterialEditorRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/MaterialEntryRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/MaterialLabelRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/MaterialPickerRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Renderers/MaterialTimePickerRenderer.cs create mode 100644 src/MaterialDesignControls.Tizen/Utils/TextAlignmentHelper.cs diff --git a/MaterialDesignControls.nuspec b/MaterialDesignControls.nuspec index 36782ffa..59de8e71 100755 --- a/MaterialDesignControls.nuspec +++ b/MaterialDesignControls.nuspec @@ -13,7 +13,7 @@ MaterialDesignControls Plugin for Xamarin Forms is a collection of Xamarin.Forms controls that apply the Material Design Guidelines Material Design Controls for Xamarin Forms - xamarin, ios, android, forms, xamarin.forms, plugin, materialdesigncontrols, materialdesign, materialcontrols, horus + xamarin, ios, android, tizen, forms, xamarin.forms, plugin, materialdesigncontrols, materialdesign, materialcontrols, horus @@ -24,6 +24,9 @@ + + + @@ -44,4 +47,12 @@ + + + + + + + + diff --git a/README.md b/README.md index 561c3a75..3208c56c 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ MaterialDesignControls Plugin for Xamarin Forms is a collection of Xamarin.Forms | ------------------- | :------------------: | |Xamarin.iOS|iOS 8+| |Xamarin.Android|API 16+| +|Tizen |API 4+| |Xamarin.Forms|>= 4.4.0.991864| ## API Usage @@ -29,6 +30,12 @@ or if you're using **Android**: ```C# Plugin.MaterialDesignControls.Android.Renderer.Init(); ``` + +or if you're using **Tizen**: +```C# +Plugin.MaterialDesignControls.Tizen.Renderer.Init(); +``` + You must add this namespace to your xaml files: ```XML diff --git a/example/ExampleMaterialDesignControls.Tizen/CustomPageRenderer.cs b/example/ExampleMaterialDesignControls.Tizen/CustomPageRenderer.cs new file mode 100644 index 00000000..a47721eb --- /dev/null +++ b/example/ExampleMaterialDesignControls.Tizen/CustomPageRenderer.cs @@ -0,0 +1,18 @@ +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using EColor = ElmSharp.Color; + +[assembly: ExportRenderer(typeof(Page), typeof(CustomPageRenderer))] +namespace Xamarin.Forms.Platform.Tizen +{ + public class CustomPageRenderer : PageRenderer + { + static readonly EColor s_DefaultBackgroundColor = new EColor(250,250,250); + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + base.OnElementChanged(e); + NativeView.Color = s_DefaultBackgroundColor; + } + } +} diff --git a/example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.cs b/example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.cs new file mode 100644 index 00000000..66314576 --- /dev/null +++ b/example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.cs @@ -0,0 +1,21 @@ +using Xamarin.Forms; + +namespace ExampleMaterialDesignControls.Tizen +{ + class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication + { + protected override void OnCreate() + { + base.OnCreate(); + LoadApplication(new App()); + } + + static void Main(string[] args) + { + var app = new Program(); + Forms.Init(app, true); + Plugin.MaterialDesignControls.Tizen.Renderer.Init(); + app.Run(args); + } + } +} diff --git a/example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.csproj b/example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.csproj new file mode 100644 index 00000000..30a43dc1 --- /dev/null +++ b/example/ExampleMaterialDesignControls.Tizen/ExampleMaterialDesignControls.Tizen.csproj @@ -0,0 +1,31 @@ + + + + Exe + tizen40 + true + + + + portable + + + None + + + + + + + + + + + + + + + + + + diff --git a/example/ExampleMaterialDesignControls.Tizen/res/arrow_drop_down.png b/example/ExampleMaterialDesignControls.Tizen/res/arrow_drop_down.png new file mode 100644 index 0000000000000000000000000000000000000000..21386c66ac6377bbd7a99c3c61b24674094cb28b GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjdY&$hAr*|t5{wBVJxzfV7>@ks ze89S8OA4cI?WTrl2e&p%E8LVYVd>;R11>j42Bs4dZ+8`Z69MXE@O1TaS?83{1OPmc B9^L=| literal 0 HcmV?d00001 diff --git a/example/ExampleMaterialDesignControls.Tizen/res/calendar.png b/example/ExampleMaterialDesignControls.Tizen/res/calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..1351caac287131ac4ee6e735c35b239fafdd64d3 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj-kvUwAr*|t5*i=mTQo!b>$(3l z{*dxeZ2cj1M91d?%es!DKN73WS9Z2teBgTe~DWM4f70nj@+7)JnvVe}2Ri`c0kwi<}jNK{Tx&JEADIX>e%V{~ur{Y8;1mU{0A z!vt>eQXNQMZW+TT)sd;f=gixcJ{aJN%ESW|uKGm{v=?lglhC#VN4VR4KL+upEhoSx z(Plr&CUBy)SH!<2gRDTk1W`|Ge+U~@rD${G5{u|9eOHt;sjoD*C;H}#h+^MDqJ3a@ z`~m0C{YxwleaVUVok{55QEELx_qN49*4i7w;Fl)$Nucj>glClD;CiZS+%Uk$%+4pi v#@_zT816;}&41;GMmw$7R`!aSy_+`6zp-qfz>Xib+g!E$t>n2lffz$n?W4N7+e|Sw_I-U z+~aQB^Vjd?z_BtXPHC>IQ0Qu?qYy%&(`-HyhC-MvPuga}4Wdli|Ier8oG5SVNXD-3 zYED%5WlybV;g%!_FV-Z^gjcQFAPgi%!a14XQQ}?L$_5`2b74Ij%q1qmHqBpn5(e4e zLE>6?%l^`Z#DI|u$mY8&`=i$`5_Pg`ro|X=F`RBb V?%%w=N*QPxgQu&X%Q~loCIHGUC8q!Y literal 0 HcmV?d00001 diff --git a/example/ExampleMaterialDesignControls.Tizen/res/email.png b/example/ExampleMaterialDesignControls.Tizen/res/email.png new file mode 100644 index 0000000000000000000000000000000000000000..fb57102c451b584cf1e851621df929eb07e00e0e GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iNuDl_Ar*{wC)n~eIf$^SN4*lX zV0pfwU}xt&mwu;*wl5Z>?`@oRYI4M$l+UUgSQjQNyY=Mkzm1aTw%q8^WqjV5DpAPR z(`8{8l^7v)V4`%q literal 0 HcmV?d00001 diff --git a/example/ExampleMaterialDesignControls.Tizen/res/save.png b/example/ExampleMaterialDesignControls.Tizen/res/save.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d16d113e9b115caf499e2fca2aded16a432cb7 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+ibWaz@kP60Ri9HAAKeRerFSCJh zcAL0@rqGs#){P7;Vv9@_woF*{(0-}ZhQo?$7WO$ZaY%Pw4d4`CtKiqn5);y7!8@rS z(DRW=$YIyj9bZd~n@t4F9)JEK+|>AsBcAP0%k@SrHf;umN!Px-R?b?H1+CO|6Omtg?3L24kfL^^13SS6{T!CeoF)p@_>^w(39G)tN__o^95 zP0Et6<;t^=E87x^(jx7_a}hmAYw?Fp$5D_o3P$B3cB~5kTAf8|0RSvS{6s4N+Y#PH zofUa`E9$Tlxov hNt*c_?;cHRkQYLmx+aevauWam002ovPDHLkV1mbKa4i4; literal 0 HcmV?d00001 diff --git a/example/ExampleMaterialDesignControls.Tizen/shared/res/ExampleMaterialDesignControls.Tizen.png b/example/ExampleMaterialDesignControls.Tizen/shared/res/ExampleMaterialDesignControls.Tizen.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3cb98608134e7b9eb4beb7394fec9f03e40f63 GIT binary patch literal 10097 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 TJbOA100000NkvXXu0mjf?x(Kf literal 0 HcmV?d00001 diff --git a/example/ExampleMaterialDesignControls.Tizen/tizen-manifest.xml b/example/ExampleMaterialDesignControls.Tizen/tizen-manifest.xml new file mode 100644 index 00000000..8eea35ea --- /dev/null +++ b/example/ExampleMaterialDesignControls.Tizen/tizen-manifest.xml @@ -0,0 +1,16 @@ + + + + + + ExampleMaterialDesignControls.Tizen.png + + + diff --git a/example/ExampleMaterialDesignControls.sln b/example/ExampleMaterialDesignControls.sln index d31d6040..0245ea1c 100644 --- a/example/ExampleMaterialDesignControls.sln +++ b/example/ExampleMaterialDesignControls.sln @@ -1,125 +1,238 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExampleMaterialDesignControls.Android", "ExampleMaterialDesignControls.Android\ExampleMaterialDesignControls.Android.csproj", "{1E4E88F1-A058-44F5-A441-EAD9F534EF91}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExampleMaterialDesignControls.iOS", "ExampleMaterialDesignControls.iOS\ExampleMaterialDesignControls.iOS.csproj", "{14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExampleMaterialDesignControls", "ExampleMaterialDesignControls\ExampleMaterialDesignControls.csproj", "{439F7D85-7EF9-404C-AA78-98A755644B6A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExampleMaterialDesignControls", "ExampleMaterialDesignControls\ExampleMaterialDesignControls.csproj", "{439F7D85-7EF9-404C-AA78-98A755644B6A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialDesignControls", "..\src\MaterialDesignControls\MaterialDesignControls.csproj", "{2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MaterialDesignControls", "..\src\MaterialDesignControls\MaterialDesignControls.csproj", "{2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialDesignControls.Android", "..\src\MaterialDesignControls.Android\MaterialDesignControls.Android.csproj", "{771F5490-1C4C-4BFF-A829-E532336552F8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialDesignControls.iOS", "..\src\MaterialDesignControls.iOS\MaterialDesignControls.iOS.csproj", "{2BFC48FE-5BE1-4482-8469-77DDA82D13C8}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MaterialDesignControls.Tizen", "..\src\MaterialDesignControls.Tizen\MaterialDesignControls.Tizen.csproj", "{94AEDF04-D979-433E-8393-4D4351BCD98E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExampleMaterialDesignControls.Tizen", "ExampleMaterialDesignControls.Tizen\ExampleMaterialDesignControls.Tizen.csproj", "{D548FFA7-8261-4ACF-B386-0F986D1CCFA5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Ad-Hoc|Any CPU = Ad-Hoc|Any CPU + Ad-Hoc|iPhone = Ad-Hoc|iPhone + Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator + AppStore|Any CPU = AppStore|Any CPU + AppStore|iPhone = AppStore|iPhone + AppStore|iPhoneSimulator = AppStore|iPhoneSimulator Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - Debug|iPhoneSimulator = Debug|iPhoneSimulator - Release|iPhoneSimulator = Release|iPhoneSimulator Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|Any CPU = Release|Any CPU Release|iPhone = Release|iPhone - Ad-Hoc|iPhone = Ad-Hoc|iPhone - AppStore|iPhone = AppStore|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|Any CPU.Build.0 = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|Any CPU.Deploy.0 = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|iPhone.Build.0 = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|iPhoneSimulator.Deploy.0 = Release|Any CPU {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|Any CPU.Build.0 = Release|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|iPhone.ActiveCfg = Debug|Any CPU {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|iPhone.Build.0 = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|Any CPU.Build.0 = Release|Any CPU {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|iPhone.ActiveCfg = Release|Any CPU {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|iPhone.Build.0 = Release|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|iPhone.ActiveCfg = Debug|Any CPU - {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.AppStore|iPhone.Build.0 = Debug|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1E4E88F1-A058-44F5-A441-EAD9F534EF91}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.AppStore|Any CPU.ActiveCfg = AppStore|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.AppStore|iPhone.ActiveCfg = AppStore|iPhone + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.AppStore|iPhone.Build.0 = AppStore|iPhone + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|Any CPU.Build.0 = Release|iPhoneSimulator - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|iPhone.ActiveCfg = Debug|iPhone {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|iPhone.Build.0 = Debug|iPhone + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|Any CPU.Build.0 = Release|iPhoneSimulator {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|iPhone.ActiveCfg = Release|iPhone {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|iPhone.Build.0 = Release|iPhone - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.AppStore|iPhone.ActiveCfg = AppStore|iPhone - {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.AppStore|iPhone.Build.0 = AppStore|iPhone + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {14A1BA06-3AD2-4FB2-B14D-BFC5D66DB869}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|Any CPU.Build.0 = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|iPhone.Build.0 = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|Any CPU.Build.0 = Release|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|iPhone.ActiveCfg = Debug|Any CPU {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|iPhone.Build.0 = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|Any CPU.Build.0 = Release|Any CPU {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|iPhone.ActiveCfg = Release|Any CPU {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|iPhone.Build.0 = Release|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|iPhone.ActiveCfg = Debug|Any CPU - {439F7D85-7EF9-404C-AA78-98A755644B6A}.AppStore|iPhone.Build.0 = Debug|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {439F7D85-7EF9-404C-AA78-98A755644B6A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|iPhone.Build.0 = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|Any CPU.Build.0 = Release|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|iPhone.ActiveCfg = Debug|Any CPU {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|iPhone.Build.0 = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|Any CPU.Build.0 = Release|Any CPU {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|iPhone.ActiveCfg = Release|Any CPU {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|iPhone.Build.0 = Release|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.AppStore|iPhone.Build.0 = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {2DD667DD-DC54-4CA6-B167-B0B4C1CE72D2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|iPhone.Build.0 = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.Build.0 = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhone.ActiveCfg = Debug|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhone.Build.0 = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.Build.0 = Release|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhone.ActiveCfg = Release|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhone.Build.0 = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.AppStore|iPhone.Build.0 = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|iPhone.Build.0 = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.Build.0 = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhone.ActiveCfg = Debug|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhone.Build.0 = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.Build.0 = Release|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhone.ActiveCfg = Release|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhone.Build.0 = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.AppStore|iPhone.Build.0 = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.AppStore|iPhone.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Debug|iPhone.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Release|Any CPU.Build.0 = Release|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Release|iPhone.ActiveCfg = Release|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Release|iPhone.Build.0 = Release|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {94AEDF04-D979-433E-8393-4D4351BCD98E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.AppStore|iPhone.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Debug|iPhone.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Release|Any CPU.Build.0 = Release|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Release|iPhone.ActiveCfg = Release|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Release|iPhone.Build.0 = Release|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {D548FFA7-8261-4ACF-B386-0F986D1CCFA5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D2CC6DD3-28F2-4F63-8B81-A0CFCF0BE92C} EndGlobalSection EndGlobal diff --git a/example/ExampleMaterialDesignControls/ViewModels/MaterialChipViewModel.cs b/example/ExampleMaterialDesignControls/ViewModels/MaterialChipViewModel.cs index 8381e373..a35522b4 100644 --- a/example/ExampleMaterialDesignControls/ViewModels/MaterialChipViewModel.cs +++ b/example/ExampleMaterialDesignControls/ViewModels/MaterialChipViewModel.cs @@ -49,7 +49,7 @@ public string Error private void OnIconTapCommand(string obj) { - this.DisplayAlert("Chip icon command", obj, "Ok"); + this.DisplayAlert("Chip icon command", obj??"", "Ok"); } public MaterialChipViewModel() diff --git a/src/MaterialDesignControls.Tizen/Effects.cs b/src/MaterialDesignControls.Tizen/Effects.cs new file mode 100644 index 00000000..26a10003 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Effects.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Xamarin.Forms.Internals; +using Xamarin.Forms.Platform.Tizen; + +namespace Plugin.MaterialDesignControls.Tizen +{ + [Preserve(AllMembers = true)] + public static class Effects + { + private static List _allEffects = new List(); + + public static void Init() + { + _allEffects = new List(typeof(Effects).Assembly.GetTypes() + .Where(t => typeof(PlatformEffect).IsAssignableFrom(t)) + .Select(t => (PlatformEffect)Activator.CreateInstance(t))); + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Effects/TouchAndPressEffect.cs b/src/MaterialDesignControls.Tizen/Effects/TouchAndPressEffect.cs new file mode 100644 index 00000000..e29f20ab --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Effects/TouchAndPressEffect.cs @@ -0,0 +1,66 @@ +using ElmSharp; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using TouchAndPressEffect = Plugin.MaterialDesignControls.Tizen.TouchAndPressEffect; + +[assembly: ResolutionGroupName(Plugin.MaterialDesignControls.TouchAndPressEffect.EffectIdPrefix)] +[assembly: ExportEffect(typeof(TouchAndPressEffect), nameof(TouchAndPressEffect))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class TouchAndPressEffect : PlatformEffect + { + private TouchAndPressGestureLayer _touchAndPressGestureLayer; + + protected override void OnAttached() + { + if (Element is ITouchAndPressEffectConsumer touchAndPressEffectConsumer) + { + _touchAndPressGestureLayer = new TouchAndPressGestureLayer(Control, touchAndPressEffectConsumer); + _touchAndPressGestureLayer.Attach(Control); + } + } + + protected override void OnDetached() + { + if (_touchAndPressGestureLayer != null) + { + _touchAndPressGestureLayer.ClearCallbacks(); + _touchAndPressGestureLayer.Unrealize(); + _touchAndPressGestureLayer = null; + } + } + + private class TouchAndPressGestureLayer : GestureLayer + { + private readonly ITouchAndPressEffectConsumer _touchAndPressEffectConsumer; + + internal TouchAndPressGestureLayer(EvasObject parent) : base (parent) + { + SetTapCallback(GestureType.LongTap, GestureLayer.GestureState.Start, (data) => { TapStarted(); }); + SetTapCallback(GestureType.LongTap, GestureLayer.GestureState.End, (data) => { TapEnded(); }); + SetTapCallback(GestureType.LongTap, GestureLayer.GestureState.Abort, (data) => { TapAborted(); }); + } + + public TouchAndPressGestureLayer(EvasObject parent, ITouchAndPressEffectConsumer touchAndPressEffectConsumer) : this(parent) + { + _touchAndPressEffectConsumer = touchAndPressEffectConsumer; + } + + private void TapStarted() + { + _touchAndPressEffectConsumer.ConsumeEvent(EventType.Pressing); + } + + private void TapEnded() + { + _touchAndPressEffectConsumer.ConsumeEvent(EventType.Released); + } + + private void TapAborted() + { + _touchAndPressEffectConsumer.ConsumeEvent(EventType.Cancelled); + } + } + } +} diff --git a/src/MaterialDesignControls.Tizen/MaterialDesignControls.Tizen.csproj b/src/MaterialDesignControls.Tizen/MaterialDesignControls.Tizen.csproj new file mode 100644 index 00000000..7e8d19d7 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/MaterialDesignControls.Tizen.csproj @@ -0,0 +1,16 @@ + + + + tizen40 + Tizen + + + + + + + + + + + diff --git a/src/MaterialDesignControls.Tizen/Renderers.cs b/src/MaterialDesignControls.Tizen/Renderers.cs new file mode 100644 index 00000000..b870b10f --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers.cs @@ -0,0 +1,17 @@ +namespace Plugin.MaterialDesignControls.Tizen +{ + public static class Renderer + { + public static void Init() + { + Effects.Init(); + MaterialDatePickerRenderer.Init(); + MaterialEntryRenderer.Init(); + MaterialPickerRenderer.Init(); + MaterialDoublePickerRenderer.Init(); + MaterialTimePickerRenderer.Init(); + MaterialEditorRenderer.Init(); + MaterialLabelRenderer.Init(); + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/CustomFrameRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/CustomFrameRenderer.cs new file mode 100644 index 00000000..a7b56138 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/CustomFrameRenderer.cs @@ -0,0 +1,114 @@ +using ElmSharp; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using Xamarin.Forms.Platform.Tizen.Native; +using EColor = ElmSharp.Color; + +[assembly: ExportRenderer(typeof(Frame), typeof(CustomFrameRenderer))] +namespace Xamarin.Forms.Platform.Tizen +{ + public class CustomFrameRenderer : LayoutRenderer + { + static readonly EColor s_DefaultColor = new EColor(255, 255, 255, 0); + + Frame FrameElement => (Element as Frame); + + RoundRectangle _frame = null; + RoundRectangle _frameBorder = null; + + public CustomFrameRenderer() + { + RegisterPropertyHandler(Frame.BorderColorProperty, UpdateBorderColor); + RegisterPropertyHandler(Frame.CornerRadiusProperty, UpdateCornerRadius); + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (Control == null) + { + SetNativeControl(new Canvas(Forms.NativeParent)); + _frameBorder = new RoundRectangle(NativeView); + _frameBorder.Show(); + _frame = new RoundRectangle(NativeView); + _frame.Show(); + Control.Children.Add(_frameBorder); + Control.Children.Add(_frame); + Control.LayoutUpdated += OnLayoutUpdated; + } + base.OnElementChanged(e); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (Control != null) + { + Control.LayoutUpdated -= OnLayoutUpdated; + } + } + base.Dispose(disposing); + } + + protected override void UpdateBackgroundColor(bool initialize) + { + if (initialize && Element.BackgroundColor == Color.Default) + return; + + UpdateAllColors(); + } + + void UpdateBorderColor(bool initialize) + { + if (initialize && FrameElement.BorderColor == Color.Default) + return; + + UpdateAllColors(); + } + + void UpdateAllColors() + { + var bgColor = FrameElement.BackgroundColor.ToNative(); + var borderColor = FrameElement.BorderColor.ToNative(); + + if (bgColor == EColor.Default || bgColor == s_DefaultColor) + { + if (borderColor != EColor.Default && borderColor != s_DefaultColor) + { + // Set Frame.BackgroundColor to White, if the Frmae.BackgroundColor is the Default/Transparent and there is a Frame.BorderColor. + _frameBorder.Color = borderColor; + _frame.Color = EColor.White; + return; + } + } + _frameBorder.Color = borderColor; + _frame.Color = bgColor; + } + + void UpdateCornerRadius(bool initialize) + { + if (initialize && FrameElement.CornerRadius == -1f) + return; + + int radius = 0; + if (FrameElement.CornerRadius != -1f) + { + radius = Forms.ConvertToScaledPixel(FrameElement.CornerRadius); + } + _frameBorder.SetRadius(radius); + _frame.SetRadius(radius); + } + + void OnLayoutUpdated(object sender, Native.LayoutEventArgs e) + { + UpdateGeometry(); + } + + void UpdateGeometry() + { + var geometry = NativeView.Geometry; + _frameBorder.Draw(geometry); + _frame.Draw(new Rect(geometry.X + 1, geometry.Y + 1, geometry.Width - 2, geometry.Height - 2)); + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/MaterialDatePickerRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/MaterialDatePickerRenderer.cs new file mode 100644 index 00000000..9d79d27e --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/MaterialDatePickerRenderer.cs @@ -0,0 +1,177 @@ +using System; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using Xamarin.Forms.Platform.Tizen.Native; +using Xamarin.Forms.Platform.Tizen.Native.Watch; +using Plugin.MaterialDesignControls.Implementations; +using Plugin.MaterialDesignControls.Tizen; +using Plugin.MaterialDesignControls.Tizen.Utils; +using NLabel = Xamarin.Forms.Platform.Tizen.Native.Label; +using NDateChangedEventArgs = Xamarin.Forms.Platform.Tizen.Native.DateChangedEventArgs; + +[assembly: ExportRenderer(typeof(CustomDatePicker), typeof(MaterialDatePickerRenderer))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class MaterialDatePickerRenderer : ViewRenderer + { + const string DialogTitle = "Choose Date"; + Lazy _lazyDialog; + bool _isDialogOpened; + bool _isDialogClosed; + + CustomDatePicker CustomDatePickerElement => Element as CustomDatePicker; + + public static void Init() { } + + public MaterialDatePickerRenderer() + { + RegisterPropertyHandler(DatePicker.DateProperty, UpdateDate); + RegisterPropertyHandler(DatePicker.FormatProperty, UpdateDate); + RegisterPropertyHandler(DatePicker.TextColorProperty, UpdateDate); + RegisterPropertyHandler(DatePicker.FontAttributesProperty, UpdateFontAttributes); + RegisterPropertyHandler(DatePicker.FontFamilyProperty, UpdateFontFamily); + RegisterPropertyHandler(DatePicker.FontSizeProperty, UpdateFontSize); + } + + protected virtual IDateTimeDialog CreateDialog() + { + if (Device.Idiom == TargetIdiom.Watch) + { + return new WatchDateTimePickerDialog(Forms.NativeParent); + } + else + { + return new DateTimePickerDialog(Forms.NativeParent); + } + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (Control == null) + { + var label = CreateNativeControl(); + label.SetVerticalTextAlignment("elm.text", 0.5); + label.HorizontalTextAlignment = TextAlignmentHelper.Convert(CustomDatePickerElement.HorizontalTextAlignment); + SetNativeControl(label); + + _lazyDialog = new Lazy(() => + { + var dialog = CreateDialog(); + dialog.Title = DialogTitle; + dialog.DateTimeChanged += OnDateTimeChanged; + dialog.PickerOpened += OnPickerOpened; + dialog.PickerClosed += OnPickerClosed; + return dialog; + }); + } + base.OnElementChanged(e); + } + + protected virtual NLabel CreateNativeControl() + { + var control = new NLabel(Forms.NativeParent); + control.AllowFocus(true); + return control; + } + + protected override void OnFocused(object sender, EventArgs e) + { + base.OnFocused(sender, e); + if (Element.IsEnabled && CustomDatePickerElement.IsFocused && ((!_isDialogOpened & !_isDialogClosed) || (_isDialogOpened & _isDialogClosed))) + { + var dialog = _lazyDialog.Value; + dialog.DateTime = Element.Date; + dialog.MaximumDateTime = Element.MaximumDate; + dialog.MinimumDateTime = Element.MinimumDate; + // You need to call Show() after ui thread occupation because of EFL problem. + // Otherwise, the content of the popup will not receive focus. + Device.BeginInvokeOnMainThread(() => dialog.Show()); + } + } + + protected override void OnUnfocused(object sender, EventArgs e) + { + base.OnUnfocused(sender, e); + if (_isDialogOpened && _isDialogClosed) + { + _isDialogClosed = false; + _isDialogOpened = false; + } + } + + protected override Size MinimumSize() + { + if (Control is IMeasurable im) + { + return im.Measure(Control.MinimumWidth, Control.MinimumHeight).ToDP(); + } + else + { + return base.MinimumSize(); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (_lazyDialog.IsValueCreated) + { + _lazyDialog.Value.DateTimeChanged -= OnDateTimeChanged; + _lazyDialog.Value.PickerOpened -= OnPickerOpened; + _lazyDialog.Value.PickerClosed -= OnPickerClosed; + _lazyDialog.Value.Unrealize(); + } + } + base.Dispose(disposing); + } + + protected virtual void OnDateTimeChanged(object sender, NDateChangedEventArgs dcea) + { + CustomDatePickerElement.Date = dcea.NewDate; + UpdateDate(); + } + + protected virtual void UpdateDate() + { + if (!CustomDatePickerElement.Date.HasValue && !string.IsNullOrEmpty(CustomDatePickerElement.Placeholder)) + { + Control.Text = CustomDatePickerElement.Placeholder; + Control.TextColor = CustomDatePickerElement.PlaceholderColor.ToNative(); + } + else + { + Control.Text = Element.Date.ToString(Element.Format); + Control.TextColor = Element.TextColor.ToNative(); + } + } + + protected virtual void OnPickerOpened(object sender, EventArgs args) + { + _isDialogOpened = true; + Control.SetFocus(true); + } + + protected virtual void OnPickerClosed(object sender, EventArgs args) + { + _isDialogClosed = true; + Control.SetFocus(false); + } + + void UpdateFontSize() + { + Control.FontSize = Element.FontSize; + } + + void UpdateFontFamily() + { + Control.FontFamily = Element.FontFamily; + } + + void UpdateFontAttributes() + { + Control.FontAttributes = Element.FontAttributes; + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/MaterialDoublePickerRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/MaterialDoublePickerRenderer.cs new file mode 100644 index 00000000..1f095251 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/MaterialDoublePickerRenderer.cs @@ -0,0 +1,295 @@ +using System; +using System.Collections.Generic; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using Xamarin.Forms.Platform.Tizen.Native; +using Xamarin.Forms.Platform.Tizen.Native.Watch; +using Plugin.MaterialDesignControls.Implementations; +using Plugin.MaterialDesignControls.Tizen; +using Plugin.MaterialDesignControls.Tizen.Utils; +using ElmSharp; +using EBox = ElmSharp.Box; +using XSize = Xamarin.Forms.Size; +using NLabel = Xamarin.Forms.Platform.Tizen.Native.Label; + +[assembly: ExportRenderer(typeof(DoublePicker), typeof(MaterialDoublePickerRenderer))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class MaterialDoublePickerRenderer : ViewRenderer + { + List _list; + List _secondaryList; + Dialog _dialog; + bool _isDialogOpened; + bool _isDialogClosed; + bool _isItemSelected; + bool _isSecondaryItemSelected; + Dictionary _itemToItemNumber = new Dictionary(); + Dictionary _secondaryItemToItemNumber = new Dictionary(); + + DoublePicker DoublePickerElement => Element as DoublePicker; + + public static void Init() { } + + public MaterialDoublePickerRenderer() + { + RegisterPropertyHandler(Picker.TextColorProperty, UpdateTextColor); + RegisterPropertyHandler(Picker.FontSizeProperty, UpdateFontSize); + RegisterPropertyHandler(Picker.FontFamilyProperty, UpdateFontFamily); + RegisterPropertyHandler(Picker.FontAttributesProperty, UpdateFontAttributes); + RegisterPropertyHandler(DoublePicker.SelectedIndexesProperty, UpdateSelectedIndex); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (Control != null) + { + CleanView(); + } + } + base.Dispose(disposing); + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (Control == null) + { + var label = CreateNativeControl(); + label.SetVerticalTextAlignment("elm.text", 0.5); + label.HorizontalTextAlignment = TextAlignmentHelper.Convert(DoublePickerElement.HorizontalTextAlignment); + SetNativeControl(label); + } + base.OnElementChanged(e); + } + + protected virtual Dialog CreateDialog() + { + if (Device.Idiom == TargetIdiom.Watch) + { + return new WatchDialog(Forms.NativeParent, false); + } + else + { + return new Dialog(Forms.NativeParent); + } + } + + protected override void OnFocused(object sender, EventArgs e) + { + base.OnFocused(sender, e); + if (Element.IsEnabled && ((!_isDialogOpened & !_isDialogClosed) || (_isDialogOpened & _isDialogClosed))) + { + int i = 0; + _dialog = CreateDialog(); + _dialog.AlignmentX = -1; + _dialog.AlignmentY = -1; + _dialog.Dismissed += OnDialogDismissed; + _dialog.ShowAnimationFinished += (s1, e1) => + { + _isDialogOpened = true; + Control.SetFocus(true); + }; + _dialog.BackButtonPressed += (s2, e2) => + { + _dialog.Dismiss(); + }; + _dialog.Title = Element.Title; + _dialog.TitleColor = Element.TitleColor.ToNative(); + + _list = new List(_dialog) + { + AlignmentX = -1, + AlignmentY = -1, + WeightX = .5, + WeightY = 1 + }; + + foreach (var s in Element.Items) + { + ListItem item = _list.Append(s); + _itemToItemNumber[item] = i; + i++; + } + _list.ItemSelected += OnItemSelected; + + i = 0; + _secondaryList = new List(_dialog) + { + AlignmentX = -1, + AlignmentY = -1, + WeightX = .5, + WeightY = 1 + }; + + foreach (var s in DoublePickerElement.SecondaryItems) + { + ListItem item = _secondaryList.Append(s); + _secondaryItemToItemNumber[item] = i; + i++; + } + _secondaryList.ItemSelected += OnSecondaryItemSelected; + + var box = new EBox(_dialog) + { + AlignmentX = -1, + AlignmentY = -1, + WeightX = 1, + WeightY = 1, + IsHorizontal = true + }; + box.Show(); + box.PackEnd(_list); + box.PackEnd(_secondaryList); + + _dialog.Content = box; + + // You need to call Show() after ui thread occupation because of EFL problem. + // Otherwise, the content of the popup will not receive focus. + Device.BeginInvokeOnMainThread(() => + { + _dialog?.Show(); + _list?.Show(); + _secondaryList?.Show(); + }); + } + } + + protected override void OnUnfocused(object sender, EventArgs e) + { + base.OnUnfocused(sender, e); + if (_isDialogOpened && _isDialogClosed) + { + _isDialogClosed = false; + _isDialogOpened = false; + } + } + + protected override XSize MinimumSize() + { + if (Control is IMeasurable im) + { + return im.Measure(Control.MinimumWidth, Control.MinimumHeight).ToDP(); + } + else + { + return base.MinimumSize(); + } + } + + protected virtual NLabel CreateNativeControl() + { + var control = new NLabel(Forms.NativeParent); + control.AllowFocus(true); + return control; + } + + protected virtual void UpdateSelectedIndex() + { + if ((Element.SelectedIndex == -1 || Element.Items == null)) + { + if (!string.IsNullOrEmpty(DoublePickerElement.Placeholder)) + { + Control.Text = DoublePickerElement.Placeholder; + Control.TextColor = DoublePickerElement.PlaceholderColor.ToNative(); + } + else + { + Control.Text = ""; + } + } + else + { + string text = ""; + var selectedIndexes = new int[] { _itemToItemNumber[_list?.SelectedItem], _secondaryItemToItemNumber[_secondaryList?.SelectedItem] }; + + if (Element.Items.Count > 0 && selectedIndexes[0] >= 0) + text = Element.Items[selectedIndexes[0]]; + + if (DoublePickerElement.SecondaryItems.Count > 0 && selectedIndexes[1] >= 0) + text = $"{text}{DoublePickerElement.Separator}{DoublePickerElement.SecondaryItems[selectedIndexes[1]]}".Trim(); + + Control.Text = text; + Control.TextColor = Element.TextColor.ToNative(); + } + } + + protected virtual void UpdateTextColor() + { + Control.TextColor = Element.TextColor.ToNative(); + } + + void UpdateFontSize() + { + Control.FontSize = Element.FontSize; + } + + void UpdateFontFamily() + { + Control.FontFamily = Element.FontFamily; + } + + void UpdateFontAttributes() + { + Control.FontAttributes = Element.FontAttributes; + } + + void OnItemSelected(object senderObject, EventArgs ev) + { + _isItemSelected = true; + Element.SetValueFromRenderer(Picker.SelectedIndexProperty, _itemToItemNumber[(senderObject as List)?.SelectedItem]); + + if (_isSecondaryItemSelected) + { + var selectedIndexes = new int[] { _itemToItemNumber[_list?.SelectedItem], _secondaryItemToItemNumber[_secondaryList?.SelectedItem] }; + Element.SetValueFromRenderer(DoublePicker.SelectedIndexesProperty, selectedIndexes); + DoublePickerElement.RaiseSelectedIndexesChanged(selectedIndexes); + _dialog.Dismiss(); + } + } + + void OnSecondaryItemSelected(object senderObject, EventArgs ev) + { + _isSecondaryItemSelected = true; + if (_isItemSelected) + { + var selectedIndexes = new int[] { _itemToItemNumber[_list?.SelectedItem], _secondaryItemToItemNumber[_secondaryList?.SelectedItem] }; + Element.SetValueFromRenderer(DoublePicker.SelectedIndexesProperty, selectedIndexes); + DoublePickerElement.RaiseSelectedIndexesChanged(selectedIndexes); + _dialog.Dismiss(); + } + } + + void OnDialogDismissed(object sender, EventArgs e) + { + _isDialogClosed = true; + _isItemSelected = false; + _isSecondaryItemSelected = false; + Control.SetFocus(false); + CleanView(); + } + + void CleanView() + { + if (null != _list) + { + _list.Unrealize(); + _itemToItemNumber.Clear(); + _list = null; + } + if (null != _secondaryList) + { + _secondaryList.Unrealize(); + _secondaryItemToItemNumber.Clear(); + _secondaryList = null; + } + if (null != _dialog) + { + _dialog.Unrealize(); + _dialog = null; + } + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/MaterialEditorRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/MaterialEditorRenderer.cs new file mode 100644 index 00000000..9b05aca2 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/MaterialEditorRenderer.cs @@ -0,0 +1,15 @@ +using Plugin.MaterialDesignControls.Implementations; +using Plugin.MaterialDesignControls.Tizen; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; + + +[assembly: ExportRenderer(typeof(CustomEditor), typeof(MaterialEditorRenderer))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class MaterialEditorRenderer : EditorRenderer + { + public static void Init() { } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/MaterialEntryRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/MaterialEntryRenderer.cs new file mode 100644 index 00000000..449a59f6 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/MaterialEntryRenderer.cs @@ -0,0 +1,37 @@ +using Plugin.MaterialDesignControls.Implementations; +using Plugin.MaterialDesignControls.Tizen; +using System.ComponentModel; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using Xamarin.Forms.Platform.Tizen.Native; +using EEntry = ElmSharp.Entry; +using XEntry = Xamarin.Forms.Entry; +using EColor = ElmSharp.Color; + +[assembly: ExportRenderer(typeof(CustomEntry), typeof(MaterialEntryRenderer))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class MaterialEntryRenderer : EntryRenderer + { + public static void Init() { } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + if (e.PropertyName == nameof(Element.IsPassword)) + { + Control.SetPartText("elm.guide", "" + Element.Placeholder + ""); + } + } + + string ToHex(EColor c) + { + if (c.IsDefault) + { + Log.Warn("Trying to convert the default color to hexagonal notation, it does not works as expected."); + } + return string.Format("#{0:X2}{1:X2}{2:X2}{3:X2}", c.R, c.G, c.B, c.A); + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/MaterialLabelRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/MaterialLabelRenderer.cs new file mode 100644 index 00000000..7e532435 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/MaterialLabelRenderer.cs @@ -0,0 +1,14 @@ +using Plugin.MaterialDesignControls; +using Plugin.MaterialDesignControls.Tizen; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; + +[assembly: ExportRenderer(typeof(MaterialLabel), typeof(MaterialLabelRenderer))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class MaterialLabelRenderer : LabelRenderer + { + public static void Init() { } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/MaterialPickerRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/MaterialPickerRenderer.cs new file mode 100644 index 00000000..aab1a687 --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/MaterialPickerRenderer.cs @@ -0,0 +1,215 @@ +using System; +using System.Collections.Generic; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using Xamarin.Forms.Platform.Tizen.Native; +using Xamarin.Forms.Platform.Tizen.Native.Watch; +using Plugin.MaterialDesignControls.Implementations; +using Plugin.MaterialDesignControls.Tizen; +using Plugin.MaterialDesignControls.Tizen.Utils; +using NLabel = Xamarin.Forms.Platform.Tizen.Native.Label; +using ElmSharp; +using Size = Xamarin.Forms.Size; + +[assembly: ExportRenderer(typeof(CustomPicker), typeof(MaterialPickerRenderer))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class MaterialPickerRenderer : ViewRenderer + { + List _list; + Dialog _dialog; + bool _isDialogOpened; + bool _isDialogClosed; + Dictionary _itemToItemNumber = new Dictionary(); + + CustomPicker CustomPickerElement => Element as CustomPicker; + + public static void Init() { } + + public MaterialPickerRenderer() + { + RegisterPropertyHandler(Picker.SelectedIndexProperty, UpdateSelectedIndex); + RegisterPropertyHandler(Picker.TextColorProperty, UpdateTextColor); + RegisterPropertyHandler(Picker.FontSizeProperty, UpdateFontSize); + RegisterPropertyHandler(Picker.FontFamilyProperty, UpdateFontFamily); + RegisterPropertyHandler(Picker.FontAttributesProperty, UpdateFontAttributes); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (Control != null) + { + CleanView(); + } + } + base.Dispose(disposing); + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (Control == null) + { + var label = CreateNativeControl(); + label.SetVerticalTextAlignment("elm.text", 0.5); + label.HorizontalTextAlignment = TextAlignmentHelper.Convert(CustomPickerElement.HorizontalTextAlignment); + SetNativeControl(label); + } + base.OnElementChanged(e); + } + + protected virtual Dialog CreateDialog() + { + if (Device.Idiom == TargetIdiom.Watch) + { + return new WatchDialog(Forms.NativeParent, false); + } + else + { + return new Dialog(Forms.NativeParent); + } + } + + protected override void OnFocused(object sender, EventArgs e) + { + base.OnFocused(sender, e); + if (Element.IsEnabled && ((!_isDialogOpened & !_isDialogClosed) || (_isDialogOpened & _isDialogClosed))) + { + int i = 0; + _dialog = CreateDialog(); + _dialog.AlignmentX = -1; + _dialog.AlignmentY = -1; + _dialog.Dismissed += OnDialogDismissed; + _dialog.ShowAnimationFinished += (s1, e1) => + { + _isDialogOpened = true; + Control.SetFocus(true); + }; + _dialog.BackButtonPressed += (s2, e2) => + { + _dialog.Dismiss(); + }; + _dialog.Title = Element.Title; + _dialog.TitleColor = Element.TitleColor.ToNative(); + + _list = new List(_dialog); + foreach (var s in Element.Items) + { + ListItem item = _list.Append(s); + _itemToItemNumber[item] = i; + i++; + } + _list.ItemSelected += OnItemSelected; + _dialog.Content = _list; + + // You need to call Show() after ui thread occupation because of EFL problem. + // Otherwise, the content of the popup will not receive focus. + Device.BeginInvokeOnMainThread(() => + { + _dialog?.Show(); + _list?.Show(); + }); + } + } + + protected override void OnUnfocused(object sender, EventArgs e) + { + base.OnUnfocused(sender, e); + if (_isDialogOpened && _isDialogClosed) + { + _isDialogClosed = false; + _isDialogOpened = false; + } + } + + protected override Size MinimumSize() + { + if (Control is IMeasurable im) + { + return im.Measure(Control.MinimumWidth, Control.MinimumHeight).ToDP(); + } + else + { + return base.MinimumSize(); + } + } + + protected virtual NLabel CreateNativeControl() + { + var control = new NLabel(Forms.NativeParent); + control.AllowFocus(true); + return control; + } + + protected virtual void UpdateSelectedIndex() + { + if ((Element.SelectedIndex == -1 || Element.Items == null)) + { + if (!string.IsNullOrEmpty(CustomPickerElement.Placeholder)) + { + Control.Text = CustomPickerElement.Placeholder; + Control.TextColor = CustomPickerElement.PlaceholderColor.ToNative(); + } + else + { + Control.Text = ""; + } + } + else + { + Control.Text = Element.Items[Element.SelectedIndex]; + Control.TextColor = Element.TextColor.ToNative(); + } + } + + protected virtual void UpdateTextColor() + { + Control.TextColor = Element.TextColor.ToNative(); + } + + void UpdateFontSize() + { + Control.FontSize = Element.FontSize; + } + + void UpdateFontFamily() + { + Control.FontFamily = Element.FontFamily; + } + + void UpdateFontAttributes() + { + Control.FontAttributes = Element.FontAttributes; + } + + void OnItemSelected(object senderObject, EventArgs ev) + { + Element.SetValueFromRenderer(Picker.SelectedIndexProperty, _itemToItemNumber[(senderObject as List)?.SelectedItem]); + _dialog.Dismiss(); + } + + void OnDialogDismissed(object sender, EventArgs e) + { + _isDialogClosed = true; + Control.SetFocus(false); + CleanView(); + } + + void CleanView() + { + if (null != _list) + { + _list.Unrealize(); + _itemToItemNumber.Clear(); + _list = null; + } + if (null != _dialog) + { + _dialog.Unrealize(); + _dialog = null; + } + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Renderers/MaterialTimePickerRenderer.cs b/src/MaterialDesignControls.Tizen/Renderers/MaterialTimePickerRenderer.cs new file mode 100644 index 00000000..4e81462e --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Renderers/MaterialTimePickerRenderer.cs @@ -0,0 +1,187 @@ +using System; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; +using Xamarin.Forms.Platform.Tizen.Native; +using Xamarin.Forms.Platform.Tizen.Native.Watch; +using Plugin.MaterialDesignControls.Implementations; +using Plugin.MaterialDesignControls.Tizen; +using Plugin.MaterialDesignControls.Tizen.Utils; +using NLabel = Xamarin.Forms.Platform.Tizen.Native.Label; +using NDateChangedEventArgs = Xamarin.Forms.Platform.Tizen.Native.DateChangedEventArgs; + +[assembly: ExportRenderer(typeof(CustomTimePicker), typeof(MaterialTimePickerRenderer))] + +namespace Plugin.MaterialDesignControls.Tizen +{ + public class MaterialTimePickerRenderer : ViewRenderer + { + const string DialogTitle = "Choose Time"; + static readonly string s_defaultFormat = "h:mm tt"; + + Lazy _lazyDialog; + bool _isDialogOpened; + bool _isDialogClosed; + + CustomTimePicker CustomTimePickerElement => Element as CustomTimePicker; + + public static void Init() { } + + protected TimeSpan Time = DateTime.Now.TimeOfDay; + + public MaterialTimePickerRenderer() + { + RegisterPropertyHandler(TimePicker.TimeProperty, UpdateTime); + RegisterPropertyHandler(TimePicker.FormatProperty, UpdateTime); + RegisterPropertyHandler(TimePicker.TextColorProperty, UpdateTime); + RegisterPropertyHandler(TimePicker.FontAttributesProperty, UpdateFontAttributes); + RegisterPropertyHandler(TimePicker.FontFamilyProperty, UpdateFontFamily); + RegisterPropertyHandler(TimePicker.FontSizeProperty, UpdateFontSize); + } + + protected virtual IDateTimeDialog CreateDialog() + { + if (Device.Idiom == TargetIdiom.Watch) + { + return new WatchDateTimePickerDialog(Forms.NativeParent); + } + else + { + return new DateTimePickerDialog(Forms.NativeParent); + } + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (Control == null) + { + var label = CreateNativeControl(); + label.SetVerticalTextAlignment("elm.text", 0.5); + label.HorizontalTextAlignment = TextAlignmentHelper.Convert(CustomTimePickerElement.HorizontalTextAlignment); + SetNativeControl(label); + + _lazyDialog = new Lazy(() => + { + var dialog = CreateDialog(); + dialog.Mode = DateTimePickerMode.Time; + dialog.Title = DialogTitle; + dialog.DateTimeChanged += OnDateTimeChanged; + dialog.PickerOpened += OnPickerOpened; + dialog.PickerClosed += OnPickerClosed; + return dialog; + }); + } + base.OnElementChanged(e); + } + + protected virtual NLabel CreateNativeControl() + { + var control = new NLabel(Forms.NativeParent); + control.AllowFocus(true); + return control; + } + + protected override void OnFocused(object sender, EventArgs e) + { + base.OnFocused(sender, e); + if (Element.IsEnabled && ((!_isDialogOpened & !_isDialogClosed) || (_isDialogOpened & _isDialogClosed))) + { + var dialog = _lazyDialog.Value; + dialog.DateTime -= dialog.DateTime.TimeOfDay; + dialog.DateTime += Element.Time; + + // You need to call Show() after ui thread occupation because of EFL problem. + // Otherwise, the content of the popup will not receive focus. + Device.BeginInvokeOnMainThread(() => dialog.Show()); + } + } + + protected override void OnUnfocused(object sender, EventArgs e) + { + base.OnUnfocused(sender, e); + if (_isDialogOpened && _isDialogClosed) + { + _isDialogClosed = false; + _isDialogOpened = false; + } + } + + protected override Size MinimumSize() + { + if (Control is IMeasurable im) + { + return im.Measure(Control.MinimumWidth, Control.MinimumHeight).ToDP(); + } + else + { + return base.MinimumSize(); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (_lazyDialog.IsValueCreated) + { + _lazyDialog.Value.DateTimeChanged -= OnDateTimeChanged; + _lazyDialog.Value.PickerOpened -= OnPickerOpened; + _lazyDialog.Value.PickerClosed -= OnPickerClosed; + _lazyDialog.Value.Unrealize(); + } + } + base.Dispose(disposing); + } + + protected virtual void OnDateTimeChanged(object sender, NDateChangedEventArgs dcea) + { + Element.SetValueFromRenderer(TimePicker.TimeProperty, dcea.NewDate.TimeOfDay); + UpdateTime(); + } + + protected virtual void UpdateTime() + { + if (!CustomTimePickerElement.Time.HasValue && !string.IsNullOrEmpty(CustomTimePickerElement.Placeholder)) + { + Control.Text = CustomTimePickerElement.Placeholder; + Control.TextColor = CustomTimePickerElement.PlaceholderColor.ToNative(); + } + else + { + Time = Element.Time; + var format = s_defaultFormat; + if (!string.IsNullOrEmpty(CustomTimePickerElement.Format) && CustomTimePickerElement.Format != "t") + format = CustomTimePickerElement.Format; + + Control.Text = new DateTime(Time.Ticks).ToString(format); + Control.TextColor = Element.TextColor.ToNative(); + } + } + + protected virtual void OnPickerOpened(object sender, EventArgs args) + { + _isDialogOpened = true; + Control.SetFocus(true); + } + + protected virtual void OnPickerClosed(object sender, EventArgs args) + { + _isDialogClosed = true; + Control.SetFocus(false); + } + + void UpdateFontSize() + { + Control.FontSize = Element.FontSize; + } + + void UpdateFontFamily() + { + Control.FontFamily = Element.FontFamily; + } + + void UpdateFontAttributes() + { + Control.FontAttributes = Element.FontAttributes; + } + } +} diff --git a/src/MaterialDesignControls.Tizen/Utils/TextAlignmentHelper.cs b/src/MaterialDesignControls.Tizen/Utils/TextAlignmentHelper.cs new file mode 100644 index 00000000..cf9a8d6d --- /dev/null +++ b/src/MaterialDesignControls.Tizen/Utils/TextAlignmentHelper.cs @@ -0,0 +1,23 @@ +using Xamarin.Forms; +using NTextAlignment = Xamarin.Forms.Platform.Tizen.Native.TextAlignment; + +namespace Plugin.MaterialDesignControls.Tizen.Utils +{ + public static class TextAlignmentHelper + { + public static NTextAlignment Convert(TextAlignment textAlignment) + { + switch (textAlignment) + { + case TextAlignment.Start: + return NTextAlignment.Start; + case TextAlignment.Center: + return NTextAlignment.Center; + case TextAlignment.End: + return NTextAlignment.End; + default: + return NTextAlignment.None; + } + } + } +} diff --git a/src/MaterialDesignControls.sln b/src/MaterialDesignControls.sln index ced19450..c361975d 100644 --- a/src/MaterialDesignControls.sln +++ b/src/MaterialDesignControls.sln @@ -1,9 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27703.2035 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialDesignControls", "MaterialDesignControls\MaterialDesignControls.csproj", "{6828B960-D79F-4B88-B54E-D15728EE8E2D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MaterialDesignControls", "MaterialDesignControls\MaterialDesignControls.csproj", "{6828B960-D79F-4B88-B54E-D15728EE8E2D}" EndProject Project("{5DD5E4FA-CB73-4610-85AB-557B54E96AA9}") = "MaterialDesignControls.NuGet", "MaterialDesignControls.NuGet\MaterialDesignControls.NuGet.nuproj", "{182D6E78-8F89-40DF-BBA1-1A30F8734373}" EndProject @@ -11,64 +11,78 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialDesignControls.iOS" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialDesignControls.Android", "MaterialDesignControls.Android\MaterialDesignControls.Android.csproj", "{771F5490-1C4C-4BFF-A829-E532336552F8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaterialDesignControls.Tizen", "MaterialDesignControls.Tizen\MaterialDesignControls.Tizen.csproj", "{7895C453-76F3-44A5-886E-7676619EC941}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - Debug|iPhoneSimulator = Debug|iPhoneSimulator - Release|iPhoneSimulator = Release|iPhoneSimulator Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|Any CPU = Release|Any CPU Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|Any CPU.Build.0 = Release|Any CPU - {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|iPhone.ActiveCfg = Debug|Any CPU {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|iPhone.Build.0 = Debug|Any CPU + {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|Any CPU.Build.0 = Release|Any CPU {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|iPhone.ActiveCfg = Release|Any CPU {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|iPhone.Build.0 = Release|Any CPU + {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {6828B960-D79F-4B88-B54E-D15728EE8E2D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|Any CPU.Build.0 = Debug|Any CPU - {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|Any CPU.ActiveCfg = Release|Any CPU - {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|Any CPU.Build.0 = Release|Any CPU - {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|iPhone.ActiveCfg = Debug|Any CPU {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|iPhone.Build.0 = Debug|Any CPU + {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|Any CPU.ActiveCfg = Release|Any CPU + {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|Any CPU.Build.0 = Release|Any CPU {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|iPhone.ActiveCfg = Release|Any CPU {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|iPhone.Build.0 = Release|Any CPU + {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {182D6E78-8F89-40DF-BBA1-1A30F8734373}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.Build.0 = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhone.ActiveCfg = Debug|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhone.Build.0 = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|Any CPU.Build.0 = Release|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhone.ActiveCfg = Release|Any CPU {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhone.Build.0 = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {2BFC48FE-5BE1-4482-8469-77DDA82D13C8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.Build.0 = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhone.ActiveCfg = Debug|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhone.Build.0 = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|Any CPU.Build.0 = Release|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhone.ActiveCfg = Release|Any CPU {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhone.Build.0 = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {771F5490-1C4C-4BFF-A829-E532336552F8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Debug|iPhone.Build.0 = Debug|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Release|Any CPU.Build.0 = Release|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Release|iPhone.ActiveCfg = Release|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Release|iPhone.Build.0 = Release|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7895C453-76F3-44A5-886E-7676619EC941}.Release|iPhoneSimulator.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/MaterialDesignControls/Controls/MaterialButton.cs b/src/MaterialDesignControls/Controls/MaterialButton.cs index 5a2aa88a..daaaeb63 100644 --- a/src/MaterialDesignControls/Controls/MaterialButton.cs +++ b/src/MaterialDesignControls/Controls/MaterialButton.cs @@ -351,6 +351,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName this.frmLayout.BorderColor = this.IsEnabled ? this.BorderColor : this.DisabledBorderColor; } break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialChips.xaml.cs b/src/MaterialDesignControls/Controls/MaterialChips.xaml.cs index f0c71e54..82bf2cf8 100644 --- a/src/MaterialDesignControls/Controls/MaterialChips.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialChips.xaml.cs @@ -349,6 +349,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.BorderColor): this.frmContainer.BorderColor = this.BorderColor; break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialChipsGroup.xaml.cs b/src/MaterialDesignControls/Controls/MaterialChipsGroup.xaml.cs index 1104cd9d..e0bbc538 100644 --- a/src/MaterialDesignControls/Controls/MaterialChipsGroup.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialChipsGroup.xaml.cs @@ -364,7 +364,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.AssistiveSize): this.lblAssistive.FontSize = this.AssistiveSize; break; - + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialDatePicker.xaml.cs b/src/MaterialDesignControls/Controls/MaterialDatePicker.xaml.cs index 8626b41d..660952fc 100644 --- a/src/MaterialDesignControls/Controls/MaterialDatePicker.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialDatePicker.xaml.cs @@ -452,6 +452,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.FieldHeightRequest): this.frmContainer.HeightRequest = this.FieldHeightRequest; break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialDoublePicker.xaml.cs b/src/MaterialDesignControls/Controls/MaterialDoublePicker.xaml.cs index 9754f0dc..7b99c064 100644 --- a/src/MaterialDesignControls/Controls/MaterialDoublePicker.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialDoublePicker.xaml.cs @@ -580,6 +580,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.FieldHeightRequest): this.frmContainer.HeightRequest = this.FieldHeightRequest; break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialEditor.xaml.cs b/src/MaterialDesignControls/Controls/MaterialEditor.xaml.cs index e36161ad..e676cb95 100644 --- a/src/MaterialDesignControls/Controls/MaterialEditor.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialEditor.xaml.cs @@ -481,6 +481,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.FieldHeightRequest): this.frmContainer.HeightRequest = this.FieldHeightRequest; break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialEntry.xaml.cs b/src/MaterialDesignControls/Controls/MaterialEntry.xaml.cs index 2cbc3b0e..a8094f0b 100644 --- a/src/MaterialDesignControls/Controls/MaterialEntry.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialEntry.xaml.cs @@ -553,6 +553,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.FieldHeightRequest): this.frmContainer.HeightRequest = this.FieldHeightRequest; break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialField.cs b/src/MaterialDesignControls/Controls/MaterialField.cs index 768bfacd..7737d135 100644 --- a/src/MaterialDesignControls/Controls/MaterialField.cs +++ b/src/MaterialDesignControls/Controls/MaterialField.cs @@ -299,6 +299,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName } this.imgTrailingIcon.IsVisible = this.TrailingIconIsVisible; break; + default: + base.OnPropertyChanged(propertyName); + break; } } } diff --git a/src/MaterialDesignControls/Controls/MaterialPicker.xaml.cs b/src/MaterialDesignControls/Controls/MaterialPicker.xaml.cs index 4f6e993b..28e66b6b 100644 --- a/src/MaterialDesignControls/Controls/MaterialPicker.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialPicker.xaml.cs @@ -540,6 +540,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.FieldHeightRequest): this.frmContainer.HeightRequest = this.FieldHeightRequest; break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialSelection.xaml.cs b/src/MaterialDesignControls/Controls/MaterialSelection.xaml.cs index 93eae048..620acaa9 100644 --- a/src/MaterialDesignControls/Controls/MaterialSelection.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialSelection.xaml.cs @@ -409,6 +409,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.FieldHeightRequest): this.frmContainer.HeightRequest = this.FieldHeightRequest; break; + default: + base.OnPropertyChanged(propertyName); + break; } } diff --git a/src/MaterialDesignControls/Controls/MaterialTimePicker.xaml.cs b/src/MaterialDesignControls/Controls/MaterialTimePicker.xaml.cs index b373d469..223cc73e 100644 --- a/src/MaterialDesignControls/Controls/MaterialTimePicker.xaml.cs +++ b/src/MaterialDesignControls/Controls/MaterialTimePicker.xaml.cs @@ -428,6 +428,9 @@ protected override void OnPropertyChanged([CallerMemberName] string propertyName case nameof(this.FieldHeightRequest): this.frmContainer.HeightRequest = this.FieldHeightRequest; break; + default: + base.OnPropertyChanged(propertyName); + break; } }