From 7b824b68d8f9627d9baf9641c3e24778ac161c14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Su=C3=A1rez=20Ruiz?= Date: Fri, 5 Jan 2018 13:10:57 +0100 Subject: [PATCH] Added ListViewRenderer (basic implementation), all CellRenderers and some samples. --- Ooui.Forms/Cells/CellRenderer.cs | 71 ++++++++++ Ooui.Forms/Cells/CellView.cs | 84 ++++++++++++ Ooui.Forms/Cells/EntryCellRenderer.cs | 104 ++++++++++++++ Ooui.Forms/Cells/ImageCellRenderer.cs | 66 +++++++++ Ooui.Forms/Cells/SwitchCellRenderer.cs | 79 +++++++++++ Ooui.Forms/Cells/TextCellRenderer.cs | 48 +++++++ Ooui.Forms/Cells/ViewCellRenderer.cs | 25 ++++ Ooui.Forms/Cells/ViewCellView.cs | 63 +++++++++ Ooui.Forms/Exports.cs | 17 ++- Ooui.Forms/Forms.cs | 2 +- Ooui.Forms/Renderers/ListViewRenderer.cs | 112 +++++++++++++++ Samples/ListViewSample.cs | 136 +++++++++++++++++++ Samples/Monkeys/Images/Baboon.jpg | Bin 0 -> 17270 bytes Samples/Monkeys/Images/BlueMonkey.jpg | Bin 0 -> 26481 bytes Samples/Monkeys/Images/Capuchin.jpg | Bin 0 -> 15777 bytes Samples/Monkeys/Images/GoldenLionTamarin.jpg | Bin 0 -> 24881 bytes Samples/Monkeys/Images/Howler.jpg | Bin 0 -> 28043 bytes Samples/Monkeys/Images/Squirrel.jpg | Bin 0 -> 9023 bytes Samples/Monkeys/Monkey.cs | 13 ++ Samples/Monkeys/MonkeyHelper.cs | 60 ++++++++ Samples/Monkeys/MonkeysView.xaml | 54 ++++++++ Samples/Monkeys/MonkeysView.xaml.cs | 15 ++ Samples/Monkeys/MonkeysViewModel.cs | 16 +++ Samples/MonkeysSample.cs | 24 ++++ Samples/Program.cs | 3 + Samples/Samples.csproj | 16 +++ 26 files changed, 1006 insertions(+), 2 deletions(-) create mode 100644 Ooui.Forms/Cells/CellRenderer.cs create mode 100644 Ooui.Forms/Cells/CellView.cs create mode 100644 Ooui.Forms/Cells/EntryCellRenderer.cs create mode 100644 Ooui.Forms/Cells/ImageCellRenderer.cs create mode 100644 Ooui.Forms/Cells/SwitchCellRenderer.cs create mode 100644 Ooui.Forms/Cells/TextCellRenderer.cs create mode 100644 Ooui.Forms/Cells/ViewCellRenderer.cs create mode 100644 Ooui.Forms/Cells/ViewCellView.cs create mode 100644 Ooui.Forms/Renderers/ListViewRenderer.cs create mode 100644 Samples/ListViewSample.cs create mode 100644 Samples/Monkeys/Images/Baboon.jpg create mode 100644 Samples/Monkeys/Images/BlueMonkey.jpg create mode 100644 Samples/Monkeys/Images/Capuchin.jpg create mode 100644 Samples/Monkeys/Images/GoldenLionTamarin.jpg create mode 100644 Samples/Monkeys/Images/Howler.jpg create mode 100644 Samples/Monkeys/Images/Squirrel.jpg create mode 100644 Samples/Monkeys/Monkey.cs create mode 100644 Samples/Monkeys/MonkeyHelper.cs create mode 100644 Samples/Monkeys/MonkeysView.xaml create mode 100644 Samples/Monkeys/MonkeysView.xaml.cs create mode 100644 Samples/Monkeys/MonkeysViewModel.cs create mode 100644 Samples/MonkeysSample.cs diff --git a/Ooui.Forms/Cells/CellRenderer.cs b/Ooui.Forms/Cells/CellRenderer.cs new file mode 100644 index 0000000..2f3492f --- /dev/null +++ b/Ooui.Forms/Cells/CellRenderer.cs @@ -0,0 +1,71 @@ +using Ooui.Forms.Extensions; +using System; +using Xamarin.Forms; + +namespace Ooui.Forms.Cells +{ + public class CellRenderer : IRegisterable + { + private EventHandler _onForceUpdateSizeRequested; + + static readonly BindableProperty RealCellProperty = + BindableProperty.CreateAttached("RealCell", typeof(Div), + typeof(Cell), null); + + public virtual CellView GetCell(Cell item, CellView reusableView, List listView) + { + var nativeCell = reusableView as CellView ?? GetCellInstance(item); + + nativeCell.Cell = item; + + WireUpForceUpdateSizeRequested(item, nativeCell); + UpdateBackground(nativeCell, item); + + return nativeCell; + } + + internal static CellView GetRealCell(BindableObject cell) + { + return (CellView)cell.GetValue(RealCellProperty); + } + + internal static void SetRealCell(BindableObject cell, CellView renderer) + { + cell.SetValue(RealCellProperty, renderer); + } + + protected virtual CellView GetCellInstance(Cell item) + { + return new CellView(); + } + + protected virtual void OnForceUpdateSizeRequest(Cell cell, CellView nativeCell) + { + nativeCell.Style.Height = (int)cell.RenderHeight; + } + + protected void UpdateBackground(CellView tableViewCell, Cell cell) + { + var defaultColor = Xamarin.Forms.Color.White.ToOouiColor(); + Color backgroundColor = defaultColor; + + if (cell.RealParent is VisualElement element) + backgroundColor = element.BackgroundColor == + Xamarin.Forms.Color.Default ? backgroundColor : element.BackgroundColor.ToOouiColor(); + + tableViewCell.Style.BackgroundColor = backgroundColor; + } + + protected void WireUpForceUpdateSizeRequested(Cell cell, CellView nativeCell) + { + cell.ForceUpdateSizeRequested -= _onForceUpdateSizeRequested; + + _onForceUpdateSizeRequested = (sender, e) => + { + OnForceUpdateSizeRequest(cell, nativeCell); + }; + + cell.ForceUpdateSizeRequested += _onForceUpdateSizeRequested; + } + } +} diff --git a/Ooui.Forms/Cells/CellView.cs b/Ooui.Forms/Cells/CellView.cs new file mode 100644 index 0000000..e4c72be --- /dev/null +++ b/Ooui.Forms/Cells/CellView.cs @@ -0,0 +1,84 @@ +using System; +using System.ComponentModel; +using Xamarin.Forms; + +namespace Ooui.Forms.Cells +{ + public class CellView : Div, INativeElementView + { + private Cell _cell; + + public Action PropertyChanged; + + public CellView() + { + CreateUI(); + } + + public Cell Cell + { + get { return _cell; } + set + { + if (_cell == value) + return; + + if (_cell != null) + Device.BeginInvokeOnMainThread(_cell.SendDisappearing); + + _cell = value; + + if (_cell != null) + Device.BeginInvokeOnMainThread(_cell.SendAppearing); + } + } + + public Div FirstCol { get; private set; } + + public Div SecondCol { get; private set; } + + public Div ThirdCol { get; private set; } + + public Label TextLabel { get; private set; } + + public Label DetailTextLabel { get; private set; } + + public Image ImageView { get; private set; } + + public Div CustomView { get; private set; } + + public virtual Xamarin.Forms.Element Element => Cell; + + public void HandlePropertyChanged(object sender, PropertyChangedEventArgs e) + { + PropertyChanged?.Invoke(this, e); + } + + private void CreateUI() + { + Style.Width = "100%"; + Style.Display = "flex"; + + FirstCol = new Div(); + AppendChild(FirstCol); + + SecondCol = new Div(); + AppendChild(SecondCol); + + ThirdCol = new Div(); + AppendChild(ThirdCol); + + ImageView = new Image(); + FirstCol.AppendChild(ImageView); + + TextLabel = new Label(); + SecondCol.AppendChild(TextLabel); + + DetailTextLabel = new Label(); + SecondCol.AppendChild(DetailTextLabel); + + CustomView = new Div(); + ThirdCol.AppendChild(CustomView); + } + } +} diff --git a/Ooui.Forms/Cells/EntryCellRenderer.cs b/Ooui.Forms/Cells/EntryCellRenderer.cs new file mode 100644 index 0000000..f0edb6a --- /dev/null +++ b/Ooui.Forms/Cells/EntryCellRenderer.cs @@ -0,0 +1,104 @@ +using Ooui.Forms.Extensions; +using System; +using System.ComponentModel; +using Xamarin.Forms; + +namespace Ooui.Forms.Cells +{ + public class EntryCellRenderer : CellRenderer + { + private static Cell _cell; + + public override CellView GetCell(Cell item, CellView reusableView, List listView) + { + TextInput nativeEntry = null; + + var nativeEntryCell = base.GetCell(item, reusableView, listView); + + if (nativeEntryCell == null) + nativeEntryCell = new CellView(); + else + { + nativeEntryCell.Cell.PropertyChanged -= OnCellPropertyChanged; + + nativeEntry = nativeEntryCell.CustomView.FirstChild as TextInput; + if (nativeEntry != null) + { + nativeEntryCell.CustomView.RemoveChild(nativeEntry); + nativeEntry.Change -= OnTextChanged; + } + } + + SetRealCell(item, nativeEntryCell); + + if (nativeEntry == null) + nativeEntryCell.CustomView.AppendChild(nativeEntry = new TextInput()); + + var entryCell = (EntryCell)item; + + nativeEntryCell.Cell = item; + nativeEntryCell.SecondCol.Style.Width = "25%"; + _cell = nativeEntryCell.Cell; + + nativeEntryCell.Cell.PropertyChanged += OnCellPropertyChanged; + nativeEntry.Change += OnTextChanged; + + WireUpForceUpdateSizeRequested(item, nativeEntryCell); + + UpdateBackground(nativeEntryCell, entryCell); + UpdateLabel(nativeEntryCell, entryCell); + UpdateText(nativeEntryCell, entryCell); + UpdatePlaceholder(nativeEntryCell, entryCell); + UpdateLabelColor(nativeEntryCell, entryCell); + + return nativeEntryCell; + } + + private static void OnCellPropertyChanged(object sender, PropertyChangedEventArgs e) + { + var entryCell = (EntryCell)sender; + var realCell = (CellView)GetRealCell(entryCell); + + if (e.PropertyName == EntryCell.LabelProperty.PropertyName) + UpdateLabel(realCell, entryCell); + else if (e.PropertyName == EntryCell.TextProperty.PropertyName) + UpdateText(realCell, entryCell); + else if (e.PropertyName == EntryCell.PlaceholderProperty.PropertyName) + UpdatePlaceholder(realCell, entryCell); + else if (e.PropertyName == EntryCell.LabelColorProperty.PropertyName) + UpdateLabelColor(realCell, entryCell); + } + + private static void UpdateLabel(CellView cell, EntryCell entryCell) + { + cell.TextLabel.Text = entryCell.Label ?? string.Empty; + } + + private static void UpdateLabelColor(CellView cell, EntryCell entryCell) + { + cell.TextLabel.Style.Color = entryCell.LabelColor.ToOouiColor(); + } + + private static void UpdatePlaceholder(CellView cell, EntryCell entryCell) + { + if (cell.CustomView.FirstChild is TextInput textInput) + textInput.Placeholder = entryCell.Placeholder ?? string.Empty; + } + + private static void UpdateText(CellView cell, EntryCell entryCell) + { + if (cell.CustomView.FirstChild is TextInput textInput) + textInput.Text = entryCell.Text ?? string.Empty; + } + + private static void OnTextChanged(object sender, EventArgs eventArgs) + { + var textInput = (TextInput)sender; + + CellView realCell = GetRealCell(_cell); + + if (realCell != null) + ((EntryCell)realCell.Cell).Text = textInput.Text; + } + } +} diff --git a/Ooui.Forms/Cells/ImageCellRenderer.cs b/Ooui.Forms/Cells/ImageCellRenderer.cs new file mode 100644 index 0000000..4746c9e --- /dev/null +++ b/Ooui.Forms/Cells/ImageCellRenderer.cs @@ -0,0 +1,66 @@ +using Ooui.Forms.Renderers; +using System.ComponentModel; +using System.Threading.Tasks; +using Xamarin.Forms; +using Xamarin.Forms.Internals; + +namespace Ooui.Forms.Cells +{ + public class ImageCellRenderer : TextCellRenderer + { + public override CellView GetCell(Cell item, CellView reusableView, List listView) + { + var nativeImageCell = reusableView as CellView ?? new CellView(); + + var result = (CellView)base.GetCell(item, nativeImageCell, listView); + + var imageCell = (ImageCell)item; + + WireUpForceUpdateSizeRequested(item, result); + +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + SetImage(imageCell, result); +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + + return result; + } + + protected override async void HandlePropertyChanged(object sender, PropertyChangedEventArgs args) + { + var tvc = (CellView)sender; + var imageCell = (ImageCell)tvc.Cell; + + base.HandlePropertyChanged(sender, args); + + if (args.PropertyName == ImageCell.ImageSourceProperty.PropertyName) + await SetImage(imageCell, tvc); + } + + static async Task SetImage(ImageCell cell, CellView target) + { + var source = cell.ImageSource; + + target.ImageView.Source = null; + + IImageSourceHandler handler; + + if (source != null && (handler = + Registrar.Registered.GetHandler(source.GetType())) != null) + { + string image; + try + { + image = await handler.LoadImageAsync(source).ConfigureAwait(false); + } + catch (TaskCanceledException) + { + image = null; + } + + target.ImageView.Source = image; + } + else + target.ImageView.Source = null; + } + } +} diff --git a/Ooui.Forms/Cells/SwitchCellRenderer.cs b/Ooui.Forms/Cells/SwitchCellRenderer.cs new file mode 100644 index 0000000..e6e1536 --- /dev/null +++ b/Ooui.Forms/Cells/SwitchCellRenderer.cs @@ -0,0 +1,79 @@ +using System; +using System.ComponentModel; +using Xamarin.Forms; + +namespace Ooui.Forms.Cells +{ + public class SwitchCellRenderer : CellRenderer + { + private static Cell _cell; + + public override CellView GetCell(Cell item, CellView reusableView, List listView) + { + var nativeSwitchCell = reusableView as CellView; + Input oouiSwitch = null; + + if (nativeSwitchCell == null) + nativeSwitchCell = new CellView(); + else + { + oouiSwitch = nativeSwitchCell.CustomView.FirstChild as Input; + + if (oouiSwitch != null) + { + nativeSwitchCell.CustomView.RemoveChild(oouiSwitch); + oouiSwitch.Click -= OnSwitchClick; + } + nativeSwitchCell.Cell.PropertyChanged -= OnCellPropertyChanged; + } + + SetRealCell(item, nativeSwitchCell); + + if (oouiSwitch == null) + { + oouiSwitch = new Input(InputType.Checkbox); + oouiSwitch.SetAttribute("data-toggle", "toggle"); + } + + var switchCell = (SwitchCell)item; + + nativeSwitchCell.Cell = item; + nativeSwitchCell.SecondCol.Style.Width = "25%"; + _cell = nativeSwitchCell.Cell; + + nativeSwitchCell.Cell.PropertyChanged += OnCellPropertyChanged; + nativeSwitchCell.CustomView.AppendChild(oouiSwitch); + nativeSwitchCell.TextLabel.Text = switchCell.Text ?? string.Empty; + + oouiSwitch.IsChecked = switchCell.On; + oouiSwitch.Click += OnSwitchClick; + + WireUpForceUpdateSizeRequested(item, nativeSwitchCell); + + UpdateBackground(nativeSwitchCell, item); + + return nativeSwitchCell; + } + + private void OnCellPropertyChanged(object sender, PropertyChangedEventArgs e) + { + var switchCell = (SwitchCell)sender; + var nativeSwitchCell = (CellView)GetRealCell(switchCell); + + if (e.PropertyName == SwitchCell.OnProperty.PropertyName) + ((Input)nativeSwitchCell.CustomView.FirstChild).IsChecked = switchCell.On; + else if (e.PropertyName == SwitchCell.TextProperty.PropertyName) + nativeSwitchCell.TextLabel.Text = switchCell.Text ?? string.Empty; + } + + private void OnSwitchClick(object sender, EventArgs eventArgs) + { + var switchInput = (Input)sender; + + CellView realCell = GetRealCell(_cell); + + if (realCell != null) + ((SwitchCell)realCell.Cell).On = switchInput.IsChecked; + } + } +} diff --git a/Ooui.Forms/Cells/TextCellRenderer.cs b/Ooui.Forms/Cells/TextCellRenderer.cs new file mode 100644 index 0000000..2e43a9e --- /dev/null +++ b/Ooui.Forms/Cells/TextCellRenderer.cs @@ -0,0 +1,48 @@ +using Ooui.Forms.Extensions; +using System.ComponentModel; +using Xamarin.Forms; + +namespace Ooui.Forms.Cells +{ + public class TextCellRenderer : CellRenderer + { + public override CellView GetCell(Cell item, CellView reusableView, List listView) + { + var nativeTextCell = base.GetCell(item, reusableView, listView); + var textCell = (TextCell)item; + + if (nativeTextCell.Cell != null) + nativeTextCell.Cell.PropertyChanged -= nativeTextCell.HandlePropertyChanged; + + nativeTextCell.Cell = textCell; + textCell.PropertyChanged += nativeTextCell.HandlePropertyChanged; + nativeTextCell.PropertyChanged = HandlePropertyChanged; + + nativeTextCell.TextLabel.Text = textCell.Text ?? string.Empty; + nativeTextCell.DetailTextLabel.Text = textCell.Detail ?? string.Empty; + nativeTextCell.TextLabel.Style.Color = textCell.TextColor.ToOouiColor(); + nativeTextCell.DetailTextLabel.Style.Color = textCell.DetailColor.ToOouiColor(); + + WireUpForceUpdateSizeRequested(item, nativeTextCell); + + UpdateBackground(nativeTextCell, item); + + return nativeTextCell; + } + + protected virtual void HandlePropertyChanged(object sender, PropertyChangedEventArgs args) + { + var tvc = (CellView)sender; + var textCell = (TextCell)tvc.Cell; + + if (args.PropertyName == TextCell.TextProperty.PropertyName) + tvc.TextLabel.Text = textCell.Text ?? string.Empty; + else if (args.PropertyName == TextCell.DetailProperty.PropertyName) + tvc.DetailTextLabel.Text = textCell.Detail ?? string.Empty; + else if (args.PropertyName == TextCell.TextColorProperty.PropertyName) + tvc.TextLabel.Style.Color = textCell.TextColor.ToOouiColor(); + else if (args.PropertyName == TextCell.DetailColorProperty.PropertyName) + tvc.DetailTextLabel.Style.Color = textCell.DetailColor.ToOouiColor(); + } + } +} diff --git a/Ooui.Forms/Cells/ViewCellRenderer.cs b/Ooui.Forms/Cells/ViewCellRenderer.cs new file mode 100644 index 0000000..5fffef1 --- /dev/null +++ b/Ooui.Forms/Cells/ViewCellRenderer.cs @@ -0,0 +1,25 @@ +using Xamarin.Forms; + +namespace Ooui.Forms.Cells +{ + public class ViewCellRenderer : CellRenderer + { + public override CellView GetCell(Cell item, CellView reusableView, List listView) + { + var viewCell = (ViewCell)item; + + var nativeViewCell = reusableView as ViewCellView; + + if (nativeViewCell == null) + nativeViewCell = new ViewCellView(); + + nativeViewCell.ViewCell = viewCell; + + SetRealCell(item, nativeViewCell); + + WireUpForceUpdateSizeRequested(item, nativeViewCell); + + return nativeViewCell; + } + } +} diff --git a/Ooui.Forms/Cells/ViewCellView.cs b/Ooui.Forms/Cells/ViewCellView.cs new file mode 100644 index 0000000..6bec165 --- /dev/null +++ b/Ooui.Forms/Cells/ViewCellView.cs @@ -0,0 +1,63 @@ +using Ooui.Forms.Renderers; +using System; +using Xamarin.Forms; + +namespace Ooui.Forms.Cells +{ + public class ViewCellView : CellView + { + private WeakReference _rendererRef; + private ViewCell _viewCell; + + public ViewCell ViewCell + { + get { return _viewCell; } + set + { + if (_viewCell == value) + return; + UpdateCell(value); + } + } + + private void UpdateCell(ViewCell cell) + { + if (_viewCell != null) + Device.BeginInvokeOnMainThread(_viewCell.SendDisappearing); + + _viewCell = cell; + + Device.BeginInvokeOnMainThread(_viewCell.SendAppearing); + + IVisualElementRenderer renderer; + if (_rendererRef == null || !_rendererRef.TryGetTarget(out renderer)) + renderer = GetNewRenderer(); + else + { + if (renderer.Element != null && renderer == Platform.GetRenderer(renderer.Element)) + renderer.Element.ClearValue(Platform.RendererProperty); + + var type = Xamarin.Forms.Internals.Registrar.Registered.GetHandlerType(_viewCell.View.GetType()); + var reflectableType = renderer as System.Reflection.IReflectableType; + var rendererType = reflectableType != null ? reflectableType.GetTypeInfo().AsType() : renderer.GetType(); + if (rendererType == type || (renderer is DefaultRenderer && type == null)) + renderer.SetElement(_viewCell.View); + else + { + renderer = GetNewRenderer(); + } + } + + Platform.SetRenderer(_viewCell.View, renderer); + } + + private IVisualElementRenderer GetNewRenderer() + { + var newRenderer = Platform.CreateRenderer(_viewCell.View); + _rendererRef = new WeakReference(newRenderer); + AppendChild(newRenderer.NativeView); + + return newRenderer; + } + } +} diff --git a/Ooui.Forms/Exports.cs b/Ooui.Forms/Exports.cs index 3d16c15..2f096f9 100644 --- a/Ooui.Forms/Exports.cs +++ b/Ooui.Forms/Exports.cs @@ -1,5 +1,6 @@ using System; using Ooui.Forms; +using Ooui.Forms.Cells; using Ooui.Forms.Renderers; using Xamarin.Forms; @@ -15,6 +16,7 @@ using Xamarin.Forms; [assembly: ExportRenderer (typeof (Label), typeof (LabelRenderer))] [assembly: ExportRenderer (typeof (LinkLabel), typeof (LinkLabelRenderer))] [assembly: ExportRenderer (typeof (LinkView), typeof (LinkViewRenderer))] +[assembly: ExportRenderer(typeof(ListView), typeof(ListViewRenderer))] [assembly: ExportRenderer (typeof (ProgressBar), typeof (ProgressBarRenderer))] [assembly: ExportRenderer (typeof (SearchBar), typeof (SearchBarRenderer))] [assembly: ExportRenderer(typeof(Slider), typeof(SliderRenderer))] @@ -23,7 +25,12 @@ using Xamarin.Forms; [assembly: ExportImageSourceHandler (typeof (FileImageSource), typeof (FileImageSourceHandler))] [assembly: ExportImageSourceHandler (typeof (StreamImageSource), typeof (StreamImagesourceHandler))] [assembly: ExportImageSourceHandler (typeof (UriImageSource), typeof (ImageLoaderSourceHandler))] - +[assembly: ExportCell(typeof(Cell), typeof(CellRenderer))] +[assembly: ExportCell(typeof(EntryCell), typeof(EntryCellRenderer))] +[assembly: ExportCell(typeof(ImageCell), typeof(ImageCellRenderer))] +[assembly: ExportCell(typeof(SwitchCell), typeof(SwitchCellRenderer))] +[assembly: ExportCell(typeof(TextCell), typeof(TextCellRenderer))] +[assembly: ExportCell(typeof(ViewCell), typeof(ViewCellRenderer))] namespace Ooui.Forms { [AttributeUsage (AttributeTargets.Assembly, AllowMultiple = true)] @@ -35,6 +42,14 @@ namespace Ooui.Forms } } + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class ExportCellAttribute : HandlerAttribute + { + public ExportCellAttribute(Type handler, Type target) : base(handler, target) + { + } + } + [AttributeUsage (AttributeTargets.Assembly, AllowMultiple = true)] public sealed class ExportImageSourceHandlerAttribute : HandlerAttribute { diff --git a/Ooui.Forms/Forms.cs b/Ooui.Forms/Forms.cs index 94bc20e..bcae580 100644 --- a/Ooui.Forms/Forms.cs +++ b/Ooui.Forms/Forms.cs @@ -30,7 +30,7 @@ namespace Xamarin.Forms Registrar.RegisterAll (new[] { typeof(ExportRendererAttribute), - //typeof(ExportCellAttribute), + typeof(ExportCellAttribute), typeof(ExportImageSourceHandlerAttribute), }); } diff --git a/Ooui.Forms/Renderers/ListViewRenderer.cs b/Ooui.Forms/Renderers/ListViewRenderer.cs new file mode 100644 index 0000000..da198fe --- /dev/null +++ b/Ooui.Forms/Renderers/ListViewRenderer.cs @@ -0,0 +1,112 @@ +using Ooui.Forms.Extensions; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using Xamarin.Forms; +using Xamarin.Forms.Internals; + +namespace Ooui.Forms.Renderers +{ + public class ListViewRenderer : ViewRenderer + { + private bool _disposed; + private List _listView; + private List _cells; + + public ListViewRenderer() + { + _cells = new List(); + } + + ITemplatedItemsView TemplatedItemsView => Element; + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (e.NewElement != null) + { + if (Control == null) + { + _listView = new List(); + + SetNativeControl(_listView); + } + + UpdateItems(); + UpdateBackgroundColor(); + } + + base.OnElementChanged(e); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == ListView.ItemsSourceProperty.PropertyName) + UpdateItems(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing && !_disposed) + { + _disposed = true; + } + } + + private void UpdateItems() + { + _cells.Clear(); + + var items = TemplatedItemsView.TemplatedItems; + + if (!items.Any()) + { + return; + } + + bool grouping = Element.IsGroupingEnabled; + + if (grouping) + { + return; + } + + foreach (var item in items) + { + var cell = GetCell(item); + + var listItem = new ListItem(); + listItem.Style["list-style-type"] = "none"; + + listItem.AppendChild(cell); + + _cells.Add(listItem); + } + + foreach (var cell in _cells) + { + _listView.AppendChild(cell); + } + } + + private void UpdateBackgroundColor() + { + var backgroundColor = Element.BackgroundColor.ToOouiColor(); + + _listView.Style.BackgroundColor = backgroundColor; + } + + private Div GetCell(Cell cell) + { + var renderer = + (Cells.CellRenderer)Registrar.Registered.GetHandler(cell.GetType()); + + var realCell = renderer.GetCell(cell, null, _listView); + + return realCell; + } + } +} diff --git a/Samples/ListViewSample.cs b/Samples/ListViewSample.cs new file mode 100644 index 0000000..e76b4e4 --- /dev/null +++ b/Samples/ListViewSample.cs @@ -0,0 +1,136 @@ +using Ooui; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using Xamarin.Forms; + +namespace Samples +{ + public class Light : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private string _name; + private string _comment; + private Xamarin.Forms.Color _color; + private bool _isOn; + + public string Name { get { return _name; } set { OnPropertyChanged(); _name = value; } } + public string Comment { get { return _comment; } set { OnPropertyChanged(); _comment = value; } } + public Xamarin.Forms.Color Color { get { return _color; } set { OnPropertyChanged(); _color = value; } } + public bool IsOn { get { return _isOn; } set { OnPropertyChanged(); OnPropertyChanged("isNotOn"); _isOn = value; } } + public bool IsNotOn { get { return !_isOn; } } + + public Light() + { + this.IsOn = false; + this.Name = "My first light!"; + this.Color = Xamarin.Forms.Color.Blue; + this.Comment = "Bedroom"; + } + public Light(bool isOn, string name, Xamarin.Forms.Color color, string comment) + { + this.IsOn = isOn; + this.Name = name; + this.Color = color; + this.Comment = comment; + } + void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + public static class DataSource + { + public static ObservableCollection GetLights() + { + ObservableCollection lights = new ObservableCollection() + { + new Light(false, "Bedside", Xamarin.Forms.Color.Blue, "Mel's Bedroom"), + new Light(false, "Desk", Xamarin.Forms.Color.Red, "Mel's Bedroom"), + new Light(true, "Flood Lamp", Xamarin.Forms.Color.Olive, "Outside"), + new Light(false, "hallway1", Xamarin.Forms.Color.Teal, "Entry Hallway"), + new Light(false, "hallway2", Xamarin.Forms.Color.Purple, "Entry Hallway") + }; + + return lights; + } + } + + class EntryListViewSample : ISample + { + public string Title => "Xamarin.Forms Basic Entry ListView Sample"; + + public Ooui.Element CreateElement() + { + var panel = new StackLayout(); + + var titleLabel = new Xamarin.Forms.Label + { + Text = "ListView", + FontSize = 24, + FontAttributes = FontAttributes.Bold + }; + + panel.Children.Add(titleLabel); + + ListView listView = new ListView() { ItemsSource = DataSource.GetLights() }; + + listView.ItemTemplate = new DataTemplate(typeof(EntryCell)); + listView.ItemTemplate.SetBinding(EntryCell.LabelProperty, "Comment"); + listView.ItemTemplate.SetBinding(EntryCell.TextProperty, "Name"); + + panel.Children.Add(listView); + + var page = new ContentPage + { + Content = panel + }; + + return page.GetOouiElement(); + } + + public void Publish() + { + UI.Publish("/entry-listview", CreateElement); + } + } + + class SwitchListViewSample : ISample + { + public string Title => "Xamarin.Forms Basic Switch ListView Sample"; + + public Ooui.Element CreateElement() + { + var panel = new StackLayout(); + + var titleLabel = new Xamarin.Forms.Label + { + Text = "ListView", + FontSize = 24, + FontAttributes = FontAttributes.Bold + }; + + panel.Children.Add(titleLabel); + + ListView listView = new ListView() { ItemsSource = DataSource.GetLights() }; + + listView.ItemTemplate = new DataTemplate(typeof(SwitchCell)); + listView.ItemTemplate.SetBinding(SwitchCell.TextProperty, "Name"); + listView.ItemTemplate.SetBinding(SwitchCell.OnProperty, "IsOn"); + + panel.Children.Add(listView); + + var page = new ContentPage + { + Content = panel + }; + + return page.GetOouiElement(); + } + + public void Publish() + { + UI.Publish("/switch-listview", CreateElement); + } + } +} diff --git a/Samples/Monkeys/Images/Baboon.jpg b/Samples/Monkeys/Images/Baboon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..397559ef990b4d9b3869575f02cefcc0d36b7300 GIT binary patch literal 17270 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 literal 0 HcmV?d00001 diff --git a/Samples/Monkeys/Images/BlueMonkey.jpg b/Samples/Monkeys/Images/BlueMonkey.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87fa368dd67902f40f5e7c3f0bc3b4e5220d841d GIT binary patch literal 26481 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

?5 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 literal 0 HcmV?d00001 diff --git a/Samples/Monkeys/Images/Capuchin.jpg b/Samples/Monkeys/Images/Capuchin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca727190ba69b0a5d8eed7e852627954c36115f3 GIT binary patch literal 15777 zcmb7qRa6_!6K)_tfZ_#;YbZ|97IzEoTKJXX?q0l5plFa5id#Z(w?eU^#e)>rLU0RO z;P(G=&wahKPkUx(W@XOK?svYYg{O4@iJCG*8GwO-0Z{$d08ftqO=U+HTPAOJUoUH0 zaV7^J9}n?YudLl&UESTh`TQN79bIj09Ig1=z3gB8ulMSI!^IV>JbbMk9Nqp?aQF7H z`cKc%+KSJ~!~SUrpa8(Z!p6bI!ok7D0fBIE@k#LU@$m4;iHHeEUXW8!y&$Kgq@ibH zq@iV{qoicwVPbvB&dJ3|&B)8o%fZja!O8JICm0|Q2p<>!IX?b#4jM`tj{k3Y>IRVF z0{Q_%KnxZDCMgDx6yvEMKnDO|Vgmmy{{IRN2n!nk#KrudR)z$Ci2(#+VqpPsfVlq~ zhJgvh!X^cfG2;k4XOYtdkz08RMx;`(%Ig)@;r5(Tf`#6DO>La9DL|v@|2d$+0Q|H1 zf8GDj9s_{$PbWnBFEj=a69@ugVFLdb9|IFW3dAB~7La?+qAO_S8If9eicMbE^Uoox zki5eCr$qn(5aZwEfusN#fE@JeMSa9tjzbMhT=^^*2H6PL*ZaY#tDkPnu+MMWwQhY- zB}Ho2+~hMaafsmHsQvjLw(XZzY;6yLoS+=ykmqlM8sI@i>%1!x*gB4Jc=Uo7p>?XvzL7rQD9**Kfg=Jh-CQdN3>P^@Ejmf5e;p^8lDAUUq z@mvSOszN`qW0cC0+Q+Z?YdgdXZ}+GmH0nm**t+r?y#0J3^(R>jtjL>g+F*FtJ_Uyr zAIC!*{D7m)`S@z_=vb+g&~CGfMR=%?Bn%%eN=4sxzpEqNxPjzjmk-XY26YGZ8WpR2 z)kYdG!4wx((Q^;#v?BpAOHReAP*aIR!k5=p$G>$z;y865?33=z8IE&Wf09QVsa;nj zGR4JichusOGnR{9PS6(H$QVT}2vQ0w$`0}%{__A%|WTZP2?n0UDKvZE+03W@& zC1uc;uduA`+&I-wQ^CXq0H{_OdF&IJLN;Wn8&IdQQAI5RI{*$KlReDEZNRj>o5bSeiN$!=xQE4tT3niXI zswG=kB1&$X*{zbaW!^fiyv}Ek_R0$ZU9;$A`@1`5F~S|&wf`u^jG5RqNXFWwR_oPM zj;jw)rF`>$o(f&*^zojtka0=E623IJY;-EjE|^~@$Fj{3uV7jm&Jej=O+nlj;-#cD-CGuvj# zgaB;oBPx69MTsq`@lqc&;ig+gHWZ&!+gP%Un!%Tlrckm0*tZb?L~hCDLf9;b^`~a$ zm$}CBsPf7xT;;UCl*ArVJ&VS!kC3Iy1Q5Gi&gbgq1PZvySmvIztUdv<@Ob-pHK5KS zY=wv?fSZCLSiewbLYQ>m8^kW)E4P|=IO|_ArWP8CHp>k}z!t0&4#mHPW|-z%8>p#r zSz7)L;|ece*zIcmVfxe5vxPaWIMke)=foMz&zWvB@h^HfBT=xb=KfCm zRMsZ8P-|+ix@jdzsp7>%LXTR`TS=*{RRSK ziJYDwuv9eim7`+p6(k0>&=l>DQjGLDI4w0Pv2_)$yf2H}6&w~5TL$PxgoCUq)KcCs zyps^}jdFHqG;wCNYc(>1+k=JAVPkqRJ-zL8f;PYytgHL|MeR>l`{pj!xmOZRwet1D z!oFTS%Dmlqa?+u=hajfBg;^=;{ksDjVWdF@x3;GEY<7HXq%zoenK=IpBjKIB80)-o zh%rSqRJ;Rfa)fLWA*!O6l9XUE{;yY+PB?2jua5x+H)_bdqGq)C+{*q1fzD62Jeq*@cj{0! zfB^Ur&sOEN}$cKNQZa7I~y*xM-R=p*;#=yOT6HPSye&LK@!Nb+UC=ZAR{ z3+&3jrWyk$3%qB0Yvmo4{Puy^m1Yvj=C*|?+5;R*dR##-(|iaDK8*(c%AHG$tCj6| zp5zs}mf4_tOmS8mK>n*<{PdRu@ESem*gb*ulH6w(;*ayL6_8Km}K+CqUcH_gW)y;}`(!XZg3o16x;vK%=ey2wTLOA7vyi z9{lw(QesizFX(an5L9u;rHtJ{?}_CtR)>gk)0}p zMXU8%gMsq9_>jL%mS2y^S5zQ=$uHtY&}qBxj#`+A_2Ev4XBaF|2^hINJo#iBKa4f8 zu{3pzUQsoaCl9y2)Q0zwu2Ekii4X@%iO^cf;He(I7qtTGnxlaX~f$SEJ@<}cprNAV%qnd^EaJrBy1gi2PVv2BanxCI-MX*3NbkZ@q*E_RK;X4>Ss4Suo z4u=)KzAKT&gpjBV^^jTj^Yqargo_=e7MgK!ubHh;!!j|9l`ClExC0zww;wOuw2oE4 z#2h_G^Btw#!94=FP{dFS!zSQJpoA~e3#~FS5YIr-Ef{iB~od-0;Geqs^kf(%) zAKrpJd$y?O);_%+dGli-#!+&#PDV^a^9^=v+>VCr z$G&VB7YvUSiW>K|SMl#KJ?51|X4I~@B5Myz8uW@3uoOA) zM|lEqb%P_d{Jr;l3QLtSlC{Ial40leIQ+Q4O8R}FElaL#l0E|4@uAHG4y8-oq#K6z zPYPgU^@P?R!O_OEJP}*37}IL}3P}oAE@nctlIqPi4lyxSEDtTuftKG6dO`aLafG8@ zb%tqaan?`Ck{ZuHgD_FLt!AI_*YTKufq^}r^bE|{%ZJ}@mMIS@q&4)h1Ri;Q#6nh< zB3kYage{y=`|-5VB96gt56Fx3wFQNW6CR&uh*52s!Zzx~3eRxJpb{g}75k$T#y&p* z4d#6EHGe48Qt9MXN3cXC?%&m|GkAzy&f+7N^|GBq?xNv&b_0rX*Lg$i8X(@?gP``CYZ=96YAF-`Su|uJP zP=p(_QOAs_38@*{WiUN}=G9QZ$w_{FC3)VzAv*-5qM_TzA5GRlF7O(O?mAKJrOfmR z_YAReX(VAr)e?rUd!o|HKm2Oa=qqciD66b6{wO_18k7zG_>9Uq#%>8jD6XRjowNJ?eIz_RmE-< zf9{E7JF3&(N(uYrncpl@QOc_xv_C3BH$@q*mQK+2NFfn>N6ZH^(iD7s`U>jwIIry4 z`wB-YNO~>wdn{L3Nom7RX0pT2V=V0FFQkUi-2lJcuCEleD#q&V4%gpp%Bgl8cF)ns zY#qm0O9dKsmps7V@zPmxHAsC$0+H-^{S!cS)@C;ILvDx!o>s(&Hzxe(^$1X3ih__= zXxxxJRadu!t>F(V6vUX^T`|F}eD-C)#E$>)-IjqAIT+ zBYD)E3(BtuR|bh=uD?*{MX29EI+LNZ*Yfd05d@kc3BuocmI$6?-Eg4a}As z8hEU!ehI1Hfys3z6`wVCoXV%gir8eS-uXO38XHh-<{GN!(GuW_N}UGNllu%s7aC-< zu`^oV?dEctCFrxi;BNo(n>VBxu0Lj&k2^s5rZ3M6CvfXf&@<7ylc0A#l=GGAA8P+s z?*gPAI?;2!%@KwK5ju1=v?c_h7EPmTl)MdQ;`NH~=Wdw-ELk29`i2yMOlFhMxcP{U zY3xQv9R3~6N&sn_YI+IW9Us(w?TPPD8k( zj7!b*Mr;7IdjN-aAjJa&SyS*2JtNS-HO6X$;U?$muQF4uV=a&1EgDu-@Ydonc@u{@ zzgmN`PGANyl6YVEjj%ht!Y2%K$#Bs*X5DeMJ8N-g4o_uuap%(Z&woNyJLk-@H3uMY zJY7OnaKk4(m>BpPIl9tOxc9T^Xbuf`$TX^iMbqS{*1ujaO|Rkj-Q9y_Eqy2JGrIyu zaTP2tEx(G~U%>YslF_i&(8}IVW!G5VQzXxC>^@WKZLWx&48wx7&`uz8cAG)ew>?Ts zvO`@Ky~2n)oF%u8nc27P?GAed2?jkByd06j>e zF42)s0PJio=fu4cs6ykQ6o+Z~*K#A$?}7jvVjyqQE%M|W&1X06mix~bIhQEV$)$yu z6ZAln*YM79k3e;eubd_eOl>k7fBThVIXE15SJGJozkSd-e#ag4nB!PxSoy28gfA6G ze^W+mxtmW=n~sBiyg~1EB?F{lPYm_U@x31r+Z(<4smFd{fw^IW#$UBnUAY6M-ha3X zBADohW!BW3A1Ep{2;Y2GVf6-UWpzuBwDsK4IeM`9d{xh#zUB)AKX|VxW>$PQWWvF* zenCV|-w}L$iJtprHJs>lC@XsPjO;ufZ8|fTHB)ArP18bDZ#YyupgQ662{gP6UHhCT zP)J)k(A-Xyw`-_x1Q(#`Agen|h(08qr5lJDG2-yqm2p0 z#wELMPR7fS;??WD$G{e0<|jZOS4WM$Z=<0xhVfhG#9TIbdc8a`_0qzdW}Mvl7ca>Y zb0VV9*V7m4Qfb?)l|jh_YW;2oVlo;z`KXBN8M14DKpOPLnhqkP#S&EVL$RZc-!J|X zi!ZF4lxpA!K=8;A(wPKD;K5TjDiM0cBf2W=2l>@uWknYDh6=c05$L2mge&dwuY!Q{blUeD!G)mNBbS$hwx0JdwyI zh<~i#^T_M|KIFigH<~8jx%3RYY$_{Nckl$rRfvmC8+k?_SWZCQrVQBP@_vlzoFd4R zcsPUM3jUJgQG>#;V>Zw;fcZtlon=xk=PC%ckOFooZ>yzogt}k(wFZZc*h2yyn*DDNHSRhUhMa~IH%p9-?eYTml8nZk z(^U=sbc9PX3q^+6?0z=1BJpx{t@4e73~`5roo*{ST$(Y8Fk_%BjeB_bQFss4&} zBg4yN$NRD*QkHq7ZWIqbM{opZDJ`&>39 zbpuF$<@hqe9me%zw);vH7r$iMO_GeP@F()L|KwkXGgNnLno9gl{PxT>CY z#*IcCq~=mugau3|tOHa)2Wt<(4zIgx$!^2QFa-_+{)Nbd;X^iEP8P-Txp$R61=w1& z4KB^xJMmXQ)S|8G2E#P=V^Ey@>LhM~xT_!6NgtZDovNYytfND5Irfw5j5Atqjlg5M za-aMb>bKuuo7C?j3BppvnM;3zzx}{Hq#`nYpvTuW!u;U6A-J$)FxCz;L&p#qLvT!wLWN?eilO#o+a!L?&bVTyI_*+WJOqeg) z6*pV&m}B)cur{hwvpUr=xdOHyg7=l!y%+9xb){6Ok?od$^F&+}>*cXr@GiIJb4_#% z8-;5q&q;?QlmnTZU`!sOTbEO8&7(Xf&T^u2 zipz@N1ri9(KPhz?v7mk)p`3(ZfP}T~zd~~`-)MHofK1dk^?d@^BMx?}(p4+-Fb8&B z9Kt>l%ZjZ#3)@N4q1mMBSCrF@?(dMvIjN4|Fbq;HNtWg3=mClK-~*A3&opF2{GmEu zt4^h-Y=d%C<4hbQt6wMn2v0@NCf*&;+p9EH+q0GL&s7sHhf{kP8;~NEl=QVMg*==4 zd$lujQahGOh|x4_ftl2KV(ZC$@eat3;~qjwGMYjR{OKS$LY$@YqTH<@*OFs`Ko{$o zx;c3H2Z%;QzqLfbglk}t=Bgx_viuvSTG62^@yz(OhVqW%Git5iQ_(50MMCOL(J#5& zbQJUumlh zZu6lardbFq5oLq3h z)A}?Qj76pGwo*E~rCSHZQO^#dqgR!=KtR;LlHyI=!%(DVS=XqeqBa2>gO2#+KBV8j z3sEVUm;b9$PPzEnE=BqGVx_Vt`ks);08C4EBotV!vuvkhV<6_c{ixD{Dt)E9%oe%9 zrpN~!gqnt^GHQnsmA)09=u7^9WfQm%aWmLVO!e5#h^T^nH<$t9w@Z$I7nd`v{^*4e zNj)@**3Q2)&S!sa+d79P3|5#qg?NA9mQ>}pqW-J37OhMqsCrcN-{RTI87yA>!m_DaG|K<+w6Lax>s!paZ`w?vXuE3-f=7y5eX0fq&uZuCj% z7kxDN$dEtA_%wfvT6q`<@CtkTfUcjIHPi;hC^~!ubmUaeUNYS~=QnY^(ZtAklSzig z_R*jDp5bFin$!<^0tnb&=_RU8o}*hl~SGmM*870^61?qS@%6 z%FC1~8E>zo-^=cz;N*Vhr7X*iPOhgSA})l_1YL3lR{Ds%q_@P28Quom@VuJt|NK&M zr7@L~r0k@tbf6W;dQ@Wxls_S_t5?eruU{{}rw{Qk48fJ|x|@#sx=kh#wQx~%oyJV> znSl`;qQ04ifqt%pId1>xLfJgDeG8n%cNx;?8GXO?ge-?5KOd4m-<1V;U=tA>PMNd z%B+RLy?05~#jI|p?c$8q<(b-2SvKUqGqu4S<H>2g<7>;>Cwz!%}zaTaV--i<0y37-__?R|)^jj$M<)@Nk zB@bkMeBwK2AFtdBi9)^G2}aisf*(!RbxagH3|d-3WNR=Z11HOWclZQ6>OTQo-9EW0 zby7Xww5>}+4bn`yD1PfA2+&f^m-cd`by2+?C)!GI`dt)LA&lf1kuQnrms+E83u#g@ zrc0?^;tW~)xEub%LcM9E+L}z+pK{S8542Mw=xQ;-{OU`=0n2!O$tdn3-q32`gUEYc zPvp!`aFV$r6Iow0aOq&YxzCtvWUCu@{pdY^i07SCkNHg`ChmF+Nd3daTl_dNY9)iL z(>s*z%!8(!uDg(&8Z=6XCO^{{*mce2@pXb~S6e%wMa@*)E~!4RMu5dZ0NqS}QL|CYd zwA4j$|0+9Zfz6aWb)g*ex9Q!$YowhDkG4xSs3l>qd`%oX z7g}}`=6S1@iv6?DWV;{^q^^JxUMl{`yh-1dlCZSWFy6QidP1tbFMuC`H`*c&Gjs zQd^bx*NJnIjlx54fc%~E?M1azy&R+RorAEpV)?#(<8PTW!LpGHgSjeUtN0=LLn`)s zxje|dW0ei+=4h{eyqrx-Ajd}Kl3{m7rYx$9(k#<#@pC0Y0OPb^Xe*G~?r#iex2z=K z!_`T7m=2OM43BsqSlT<7d`y~JvIXo}1EC8OBsjRQ9^8{c3*uVZEzt<{T+n$)@6PB! zSKF*4cJ8As2QTKdk4EFkxUxKM++Fs`{R0cqRgwvFGF-yuN=OkMC%sy^=89hWdd7MN zJx>67E4V$6%s1jz#v#YjsSqhTk{+)rtRdw+&Izulsio!nVEZ>Z?r zR4&*J;@yi#HnQsms=%h4Juys^=|S!}PJFT)!W+&zwB~Lijb1zjJwl3#<#hwZv|lE- zW{l><6w?K~@c!eRm@)7-8;QSLjBo!fsfH*wbNt2_x3Ha$L}jT@dYeDKFbzuNpPm~A z&lFm>D);lKRV|HLxGYX_Ww(DwV_J*8h`^KegJoGLPDynDuH9oPQxcCVCi#HOfo9&)qy9r$)8MLa=<@ z_rv`OAU>wk>f&=hhJ(D=M&w-2@&_0iOyev=%dx$Oc1_hNILWjWJ#XW#w`R=UeEEC4 z{PEhofWU-P68?9T_2f?eir{OZF>IsEFd@Ml0+M4`%X=zs;VTOpW@Fu02rGf z1n+8oG>6RG?L?i~Sal^M{wyabF`%dW+^(yw8zldsZ-w&y$IVTjD=2gQV&buhjQuZ@_toxyhV$E# znEn9oC6Fa&gdM=29cZQ(X>DG@SqeuKo>~W*#z#^-tEJj~0?3A3_An5NaW&yEA8xTe z0nGjt7G2}1Tu$D_=J_|#o~22dpRAcIR$YIN`zKrvt#2Lrn!5=YPWF%LvK-M;8@?e( zwnoqCTQB9A!qz zqQW4UK8caE(VPGX)1($Nsdi)mkQokx*D(+m zl+(HNisv0Q%I~&5bORT#+nWCz&x+8rRt7cva``$!W**LPhj_0ESM`>y0B4Y{ra&Bsu3{QX& z`0fZsb*=K)DPq>K6|^7!r@SmiwBN_4S{*4p^~2l4h<{Z_2#N!tZwxU+HVM!DNJDiP zBH}rWT{v~#D#K<*sdjb7B6prszceY~&3tdWowHA<#Af3qkjYf3gaJK7`v77j#B4CtE6|n_JsO}cacs+-8QMF;93Y{ zc5O@#us**y7?lW7VWW?ad13d>1{30W+~*wKh~ejSa*-QPDjsEx;M6`~6(nPi6EfCJ(%Ig_C$= zWG^`kj*hpV09$%IsR3x@zDk-0?Tk6jmT+a@$sUNl;d<&PxHmhM^IeiCd~&NN z(XVjgL&VyASG})zj!E(-Bbz|Xn)Gw4_w$H?fIm+4`_%Xxwu^y;YgkT^=uOohqUD0t zxDzZNmt}SswU4eQJ-Q5hqLq}$xh|H-lpRnjBaIGP$^(Dz8H5K>v_2u)E|C|4Mt$0^ zKM3dmQp2}6hiOB;&C@vuIp!iUhNM{5NP&6KvibkaDG1`6vPJE`bB@{PbG9FR z3U6|443cP@B)Q2q`h9~T4}VU2UP{4(gv}Irqq(qWb?%Um}PaO00YhH z$zM_-fYjvbL}{AEJLUF$<^#O_{u!-W{TY=u7T0B*z!#~1x(69@AH>xvHehPYE);(8 zp*c-c!@`zS@c6IP@7z_0Z|aGNLxUN1&8S7x5*wqqTp|Ma{WsW6A+r`@1mmlOzTerT z?0WH*pFevgc^f{lOwS|z+z0z^2RYznhHq}$=c;(Zshn-#+G9)y{ZNwE{bpWcJmNBwoW}A*OU>3Af=II>umM2no&366%!1Ke>5$QJ-8^hy>%5i4Vl%q#9ql zvw#Hhb-D%(ZC`Woqy+U;7pXV#mQ|xk&o)~0zn|;gCr)T_uYX!O`5yvcDlII zOT*Vhj3>(vjVd!15|a1aT>E-#OVHSo`kYg|LoF#BUl4+U*0yJQmI^|o*dXKTX0ovc94=d;)x%ydF>dwlT~0jOFcJ{2N~#o1`^0n}xw##IdZ5SAlb4 zQ%HGV;@8DE*hWnsUKjJ*F%2k0&bFm_5zz?r&H-+ybR;f_flmvPh-9ZaL$WhDN}A0! zVKN-5@f_N5P$_ky?Yow)?@L^8p5_seQq*=;%OtZd+pw7;+tbTf&fk` zI+pwG*`w+j6>f#4kR@THPNPkr3Y%Pye%iruNF#{FRkEW-aUjy_=_rx|n&0Nl|h?Iq0J2}704*KHp`8mIy zc9|4N`fkQ@*3sb7UsT$%jO9(0jx^U5>*JP5o5!EtrSv1#!pC!2zkE*ADtGmmR9C6e zYFwAw*FR1ltl3+o`xzb=)70nQixvO7R!e-}15}qu#{Ra+gx-mE{NsTB)%Oz|s{VBS zJ&RSkgz;R`F(CcYM??!vLCcVnktAtT%lL6?Dd#{Nr%HtT3BWZ&ocN)%9Dcs0@Qf7> z4Vc>J2eX3hJuHLm=V`8{vEx*Ab5~Bash$AipQ?-l_Di6g{Lz64cY;rVHKSpcuNghY zvi-T0cv2nCZ}?un{p69-nJLjeYW_w;W%fZyErXL~3B_{8{U7kU%?0cfG6a(D6Zhl7 z96=Ns%HkvV$%z2KNsIyMY#8d>yGGNEGLv84>i54}F+Qg*B>{lIbMeKDwzgS)j-@6N zVA9R7OKAJjpi_L+TwqQu;0js|5aw$gp14;-D!r14gd-KfY(vb1{$MATmx4@2> zTUExry(@V$`d?xLhs4^h`hAd16SBDBAJu{4aGWH!zBgJ}{DGCkVzRSC-P`4OQz@wp9$}{@6$HzDw zp9J*i6W7!)ua$2qi7Wa3@%0k*)`%(VkGv`oPIu)-uV@NO@UTpD5LCHsuKo9CFdLW3 z)YyU90l*c_+rMI{nk)Y@N5@}`Toff4DdDE3%gvKgxa%PT#r8Q0YSZeu@z3~;wv%1% z58BXFmpx5bUIC1gTA9lO9Crf+v%Z=Ga=VE(r#(hjR7cn2RiSi6(<}DyYLz4*9Bc49 zGGh3>AChZ?Y7u3uOQ)KZGo+s4htso!W}VmDZPhV7JU3Y3CX*WUupQ030y4Cd!ZoaP zQhl#4!zoEEUcD@Xd7Rfc6r-O2@B?4ErSwAgwkvl{+{OK(nnlj-e;#}H2hB3>A;L0FfpIxB zqxC~mcK$U8NKp~LaJEv?KAs zt%Kg!Ka$9r!+IN8>Zdb5Rx7Gk-)beV(CmhKZwn%ZGB6q4AXA_Eu3+$1qy|=C%s2m> zEw?|w{27&6sR zv)dvVJid-3{3UFBV4Xo|qFRQR)L_9fzhLor@R=}dL;_1sc{6k!73BJomn$_^C$-2h zg4HMYYGy`c{u%n%Fey8mVgc5nIu`!ooJJe%Z`pJY-#^&r(#sj zz1SE~yk9K!@{GLIdm*0hwzGtXsa80M?l0@c{ske}6Ns5cAU4oje?)W-Iy+DfCR<5w~ zBA2+3u0iRRLcOSLx4-1p0><*5HiA3zR*J5!w~iy)+IOkd{rKjZ`sk7-!;tivsb&JU zNb-&_0{hO3#>~85$b1peg}@=>ad+2eP~kG6#+AH?8l*cb?n*DL>GCZyT;0wqbF^_n zMCsJ=`6WD3bpvyY6P220Arw619bc8m4z+uW)6!5A><2}msZfzt!=Ybc8@N|VRDg%B zf>XJB)Z=eTmk+S4n@#!&mbA?G{y8@O-v7|eXBHLUB!t+ytuc`~*rQl7d7`&m>z)Tl)ZzettM3nxXLCR;>+2O19jBmPyoVuRXS0x^&H^uxf z>FoVBjt)b7%m1MposwG_3|V(u3RjPb9X@MEBh7G_S^T6`X(pb3G(b#mLz_DSi-&R($OZrboUl5X%SSlvE4pNr0VG z;y3IM{_2W^ast9Xa{|ICuy7>4+Ar_sTWB9Vi<R?~^G-tlj#Sh&09HRt7VFbL?xAII-TE^LYO+5uBRlI3}e{uGg; z`sx${qqTvMtUf5jdhN$jbIh*>!_oL?ll9$q)-6_2v3GmZ(%;JSBx#1|Ncb6p_NcpP#mLto|qx5|Z$2_LnKj?zU;d`+%F&sKGrx?1Vk zI4Y2~I1T~sh%N8hgeW~*jdw}iGF{}wC}>y`1PlD`4n#n3H{_LSp>w+T%*}|}AHjv5 z0V0X#m9y0N&;NYpo?u}|wa3T%E4TjCNeDO(oR?nB->sm%oclamW>^T1DROer7=jVO z1!*IN4#uULkmMoQ(>}hKL2kKC;EEylO#S3$6`J3(79uV`78lpNTJ*-`l}(_!TdZ~R z#Y_)!ch2t|Jz-4wu-j})d`@h8kdpI?o|(LjTnYjd);2|vErb5jT*g z)CpVbC2?*Ry_7d?j<%>s$d?8E5pg|BtJ$E8*~`o4(#z7z-Y{rgES3GmiGH-Z+zH;r z=WhAW!fD;192S|G4DG@v{D)EP1wIH=S%|o17xWOE@z@o4HhHHtUbCMJKi<)O5 zYeb|S5ZzJEA&myApn_}&rhb8;1V0%KsP+;KlfyRgFC~a5?Hb)f)4qBFjsPw9km`=r zI>u4HreX=a=NY*(&A@8}h$r;7jP^-o zCeUW>hU8V(tX$HqxTR@cf?@B;OQcGF0kI&XA!{qssqbvBsM}^Riz{5yNK*WbSILoH zSlOq_v}gYM4ce_r5EeHtegSac1CEca0-dqW9yC^0=eyOHFRU}D(xdaP@)}oAsA|~-O31VD^7Mr>^c~de7wK3gH;WCr8|B|#|r+z8LCiw+ul{3;ztUM7bk_^A^il6HqUz|`Db)kYQ|Sf;zhJc zk}!&s=F$d((I*EHGt zzv2U4;1+te=1~CdQKWu18A5eV?K%pt^_X?6-G8L}(HIp2Sz`vqI-UU8z>5R1P`BFV z0kSctw5uRyDEp~(^pXS>BZt^_>Tw88{QkaWGrph0h*|+R-LB^V1hkOLdnew`eWYag zc1}%A{5la^f;$VmXhS8&8mSCntj=znD@n>F)bG#;iy#6phP)z@EcUAFkUl~6zc9lz zN@0mjNF4+R2R#95sy~TG{>I*y$*54>HnQk2Rp8iV_RHIl8&8mLA|MZJ`l|5@uAAWU!AK*in_amZ`EH~T`fAR>??g!%9d?qw{Zksf zK=qHrcQp88#ZLv}zmF?}bh&m7Z-3!*hg>9yYa5vb zAYRq}WJxA)bM5*Vky`vs?iJF9BaG<$AG@ZsDSOP`Nh<0z&Hk$JBV5|C;2+P@J7OU8 zZb>$ZO9hw~u@qG~=ftBh&a%b2K`*R=sIcYUjroEb(jq$X1lV?raz}BC5H1E6>6WyJ zl{hjWyf-0fhuRy!S|Amjvq<*ROhmo$=LNFq-Jj&+cm!}&*0s0!XI(Mbd?j6t0z9tI z0%G+epJ9VT>IY3Lk&DUq(y4(zq|Z`q%M?{Pd;F4wP3FDHJf62n!;%BUlgq7wVRfmGW(A;^|C*kpyYWw3Li{a}Pyt-b<&&Y#%aB z)=UY{T!aM2@F7UL4Y_nouDmdOG%P-5*Y%r1A0H7<&gwUN=V7Q6j6nvY9K-P#S(AMStMt0g1O83WWB07H}Oxi?6js9YZ8C|J9~D~>n-IM z)Qj1fjwzfDTXq;79wOOeBHacQ)M>x}JqTq;UzIuGn`CE`muFbpCA|`ilwF5|>`g1@jD8^gJ^@N(|JX2|1!Mdfq{*_xfa%FDn-H$H0+~Ypr9(;B m-NfiENdjp9xB1Uc0Yt2JwuD2&$6;j+|IEJ_KA(B|{eJ+Y+xZdz literal 0 HcmV?d00001 diff --git a/Samples/Monkeys/Images/GoldenLionTamarin.jpg b/Samples/Monkeys/Images/GoldenLionTamarin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af048d6c94d3e592e6caac52317aa3ca7255bfaa GIT binary patch literal 24881 zcmbTdWmFu`_ORQ74estRxH}B)65KtwySrO(7=l}HC%A=#5Zv7f!Gk71fIxy=e*bgV zIp^NB-uKG>(Ce99yQ+5Ys_v@Z-SfQqybWN#l2?)kKp+rGGfFc6Jny0#D9Ol}X=tg- zE2+r66aWCaqKbp78yq$OxVURpkJNtRN|D(Tn zVSG!ce;5woANG84@P�VY`1Z+yB`7izWYIYZq7R7n^^4cDHu1{)Y!&_>HfR%?rb; zyl||qgN@${FTOCHvyY3z3*WskzKe~87XToj|D*S|v9f<*t`|o4)X|c8VNn1;Mz{Mf zw)`*lw()=Q698n~+yguv?Cia%nXH(pxuH-YYDF7AXB%&Cb`1+FCksz&Y8f{dcMI15 z0QlEA|5FRV{U^56FF_XIh6)I<^KiU`|KIYzE&R9D{~rDs+kaX7()^z>0})RCNB5t) z|IxXX0)WuXOKj5qqqEEffX)~IAYT8Ej_w@*U_}E!$IO4758*%a#opW7U6_;8&(Dv; z!N!W?pMd^b{vQqgZTY{3|LTw9pZ@+GJ8D@QTMHj&Z|Z-7YUSqa=Hp52T|K$gpmW{2Ar;Y1NS9&kA%)!;}Ww>3f9lRafT&W#g|5qdY|FhbE`S1_^ zYhJ$qUilM%Z^i*&&)@^_=aT>e9vT2|QuI;+`uDi0py&brTzUFb-~To5U-+f`e~$l` z16=CMPdG0JJL-SbGFm#+Rz9A-|M1H-@y`JfKn1V>e1HU?1Rwwtzz*;Lf`AAh3CIDj z0ChkIFa%x$R)9U=0(b&`Krj#i!~%&x8juO(0mVQ$Py;jqEkGyG3-klSzyvT0ECCz9 zHgEu(0vEt7@b~3L1_oh(@IWLWDiA%06~qG)0*Qmhb$BCqTX;|SQ1}G+ zEcjCRM))515%>l8ZTK_zdjuo|JOpY4b_5XwMFd?0D+CXOP=q9eJcMe54unC31%w@h z3xp>`3`BB7RzzV$B}4;6J48RkSi~&EO2l@=A;cxb1H@Y-BqTy4MkGNbMI=KcN2DO6 zB&0&5_eh_S=8*P~ZoptL378cu237}KfW5)7;9PJ$xDPxJJ^*KAr5vRPWd`K{L%(hG&D3?G$@)Tngd!mS`Jzh+9=u%+C4fhIt#iCx(T`udJ1|K`e*bt^j{bl z7z`Ma7)BW07%3Pv7y}qv7m>if&nAVtKnE99;nDdxFuu!n*v81qGV+CSmVYOn- zV4Y#3U^8ILU|V2^V&`LbW3OP};NanKaG0$B^$IyoFU3%M3~5P2E-B>4>mC4~ZoJ4G(V0L2+4 zA*CdxBjsDlPn5@0cvRw44peWc`lwE*38lingFqkBmJeW$E7MYQlg_xa~3z=tG;8^%s>{;?zW?11^1y~(e3t8vb5ZRz? zu56`jE9~g(QtZC$b?iGFgd8dyksO^IKRD?)jX2XeM>wCj__>_9%DFbUak*b{M{@UY zU-7W;Sn=fZEb?OT%JYWtcJW^FvGUpQ74fa|NZYMttUx{`W^`d1A`4G)bEnn;=&n)#ZCTHIQ}S|i$c z+Gg6d+P6B=I;lDvx=gx0x?l9L^i1?>^nUBh>cjN64LA)#3?>Xo4IK=-jKD^EMwLc4 z#&X7)#s?<+Cb1^Vri`Zkrem*3Upv44Xoh8GVb*GnXs&NwYyM!NZc%D+W2t0WV0mFB zW0h@nYAtE~*812+%m!xj-B!#NW_x5OW|v`iY%gJ-Wq;-%8R*f?D*SB-Komy z*;(KDy$iC7xl6YzuB(&lpc|!|zuTNUt9z{bwui7srpJY+vS+0i$jj8L%Nze?Gd1bM zD|OE67vMDR|CR7goEDAY3a zOBf_9I_w}^A-p;QHNq)kDv~P_7I__|AJr305gi`A7o!kU7mFF|8M_iE5?A~N;f=$a z>3H7w-1w&i>xA({uEeawha{_{@nr7goaE;e+mz{4fz+Zjq%_yG<#dVkY8VbI5Vn`0 zn$hu=`fbA7>rAuEu`Ir<;%wAxpX}`%m7K0zy4#zwOy@MJy;`H zQ&US`n_34~=TmoFZ&E+oAluN@$lh4;p74EQ6VT+-bkc0zyxgMP@}*U%wXu!9t)LyR zJ)r~C5zukbY2UfsW!N>>{i^#*k4R7Z2aXR_y)?b~9|=CDenR~e{pqJUW9Pu3W z9?Kuko*17ToVuU>J&QfZIWPFZ^rP*kF2zuaitY~8xt z{{5YBM{-wvFLXchNB__FzkUzkhnz>|$DSwUr_E=V=jZ1QKn6fUKtw`BKte)90)vr| zQL#}`QBY9vF|p9GiSUVuiSP*tNh#>5NXa1NgoM;=)DQ+nW)@}=Dt0b*CN6p=W~P4{ z0llnisK}^zsHk{Mq=ckQ|DWagGk}8(dIfC4gKz*i91uJX=y?zzf7!dhzic1=v#~)y zghv9yfdJ%}QWXxHQ~SNO-iG79RLK5$Pph0*JI$ zGp}X;&cz%d9iJzx!B9;Ky+ZxKfV6>ED>H>p9Y@`c_E4I8EB)PEv%km)trV#$BV)-F z!Vw1PR&u?97wJy_XdQkGsp8H`12^i*n|i%nBy{KyU1oaDR-KD@b}bPQGlQVZu2C7W z!!GB#qcO59ydd|7mQ&9o5>%(rFNiEaDO8FZw|kc-RG5)at7t{CKgU;tOnXTwBIiG*`0pOTW|3vmUY%QTCKqJZwlH91+m7d9&N77-iqK zWHCBr5L=d?OfP_~LBMZmy=%KAalt02!9P@bp62OafB)c z`SuEP6_LssiBX$hmD!jBHH+Fe=lOQ4yqO5m*Q0agEx3g#fm#iybL|d+r6!;2>yc^e zRX`b*){u5wP2H7ix)1V*US}cILaR*gkMlx?v%SmV!^2+HRE9hBu$}S&hYg8M$#fce z1@y*)%aKlYfL($Tb#Y#=OXY-H^%ynSULunP6>@Rdcsu{j(!UhX=i+r+Cl||)u^~f3 zxW5k6=FmETIKapnDP~18T!{d6KV}8ODtB#{2da%$9CXQE(k+uA85m}cAu&!>71gL` zC*u2(#8x_i$u#7Q-ej=;gSJf$E|DU$T9;gR43VasD?--1xCI3ws@Ytv%aF{!pNfv- zCPbIC8#P+iAqVD2po;IaB(3ab%35o1No)d7dK^>kW1SlW$B}%94;59DSez^~eN4DJ zeO0tKFKo>fWt3f-*Ww>b!taKIIIYm*D44k3o;waqZg%ayjiJ(=UAA`D zUt~c~$S@Mi?AJ4~Ot2#SiDA~>2OJ1LGH1OpW8*j9@bps4WwK&FJg9P30@ZJnpK6Nb zmh*fTU23BVAMWxpSYWr9W6MA}mU-8WK8Fn8uTxO}a6s!^b6MnsL* zq)%{0Gc1MbDv)z8EM?_jwDU;lRGEZZh6|mjJoorpaYEgQS>{vnCz%JQhJwE2Gw%;R zuz5w-im!3ssVTn-hw?9`@MX#stT9{r(TZ{2=8Bh8pQR8ePJ|p#4y4~N8svvWd|~z$ z{CN4+H>uA7PnE9>g_Kj&=kslqdy)YpLHkrzZ@oRGjP0^?2Jza;OG=m^jnfh=&5|^y ztt+=$(9HK^7GIy0JjR-hn9?xcULqW+_tu~3BV`o+=JJSiE3Crt{MNLMMGjD^v`H4euYgtuOJ*)YYE>75HbMnhKFKuH9bLYG+kX zOyJ;ik75_jtFU~Es9?W8%SUZXjVa>JuACuR>T5G^kjkvkUlwmrj2V#)3h7oMbrwJ5 zqgc2#EqWI}lOEW^rB$eQ9rz^4qcclgrO^Qvb+_lkhx9H)kcC(C*yx+h5!&a@NqT6- z%4tmmqI!$EN(CuD7w7w^%}CLiw0W=#g!xOD7)K=avnjGMb z*!*2vUQ?r+Qo*c{;BDMzm*;v!Z5w$wuUes64$DPA*z;nR@K6&!_zc_)Sx!L<`k=@sk-iu>=j32NXjhe3 zV^cZThMe$<&RMo)2%Jut5tX)*7(4^~lQYmLzs5vY&ytL>+r^ zf~9sBWw|U>OH;9*gI57ARn1J6Gw;kJMyZOI+l+$bp;o)cwKyljjb)XlYmA%w`@8xKlhW=WKAAm6 zh1YmX`$C4@kmUZJ5XU6mEM}b^Dgl0&FsJ_ghbCK)H6k~iiXdIxnN;Hg4^(!0f;6e- zT9@rzTWjugF5WN#0l&9}lu*o}N`oiLRG6L*f{%~rJsg~`} zG-fAUuB#d@H4#+`hr^5fX5wYUZKIWyZ~(@KTq1R{tt3D&=edTvl_{Y zn?BUSZEcLWkJpwJz=^n)4cr<|hV7{1p8S!UNv|H^xz_q@HSHxR4|oNAV)X(JgaoABRZtLwW;JPsfz-hc{q%7xZD5N zM%7yTfDw|vWqXdCXA7Aj*Zc1nl>#$gg^n)<`iwsCtMLuQTw1NkHXnt`Z-3_IF7ON) z7Q3JFsvyE&5cFe}{vePyZpGtGlindVfczTzi6*IUW z;NelI*yta>oy0zJY0iAAq~jSUk^Q>XagBdXpF$gc!Kd145uC|lDM^y94ixQe|Mjig zN!zy@E@LM;WsYu+)n0CA&mBe;W*UZubxGGkD{_y!6X+L)0b0~;y@>zQRi@G zOD_+tC0>T)A$1nS5mQtfoLZ5ga8rU!meS1aVY>psIC`40QRj2f%5pTQaE!GH%vNYN zP;yP+ubPTiQiS}XK7(;0*%&{*zNn#3jI%dGZ%1${g92pTB61{IE|9rnw&yEd3w(zx z9ad`K9I+66=yRks(FIf_w3Dy>Ms8$WId$~7v^b9=a$`g=%+S;bWXSGLY&y4P~x1On4FO(~>2bm}Hv5qNWB7h}~?>vA{J{ zD%w^V9&3TgV(2a!WQ3jhIU`@q*Zz1t^{Ib}Z{VBK2%Uu~t#3Uj(6GVdz=Tut`Z*K7 z$sHSdT~J&^-kg1HMSGkM3<|4mpu|)k$&NbC4Sq1opyFRA|F*_EB}|-(86cBz%y(W! zZbQkumV4J?9Kx|L=l&D%^UdJAERYta_9GXZt|d@N{7^0b>M^?*(Mc)DhK$uN;aiFk z6hqTLQuQ;AK3x1LdYdGe&p?cc3#95yOv!A7oT#~QwYH%%PQ#M-HASA(!%l)kI6$Y_LP$o={$U?eA+T=D zC%KSwZ+G*o-0AZ-M|tF5ZJzsKOcYMjyKx5-iZ^)K$f!O5=}iYqZSA?#n!FH|)StYy z%&k|vLprjZt+6m<%WvdNaY4@jug~br4BUIOmbjLRY83RdeU}kpa12FXb3=M9uX2lm zA&17RXt*#VL)!*KD>pl3)Z97pG$mAca`Zekm(+eNH*e^>!CH_?wBA$SyQd|y?@n^x z;#OM?W516^O>G@Bi-_gGN2LxI@gA%)B1Hy^RI2@woch{7AFkBHtpVRnt8&?o# zHHkd+w&HEugswvqhOOK$S}jE-Pe@u)xWZL&@pZlSS|!aVvci~s*>E~}3Zc>Rq)$%g z7($yy{AeA|z{m2jd0B+LZv4(Sc;lJ||b5P?o94>RrHh9jm9Irp)0j5bD=i#SEUJgcK5m7J>pCUb;5 z5%!cdSDexNYE4-->ia;QB+0*(HNW^{RZgA(lB>~lxddjC!yIg-ZFG;+jGIRNsQ6(H zg)q_ca^^zC?1_w}uPK4Wj_>R9NuB}4NT&S^O>G(mp_Zv4A2cLJ$?@q>ZS`E=j^V*{5rPaNL%&{{M z#K*6HWvw$TP^CstMocjGF&`akhBy*;1P0cBI8?ML3=E-VM=17-bnQP;6>1d{-kOLq zBR}EcJuuT{F<(fezfF&X}cUdab>lV{!JSH_WLZ_Sh5GvGGpgP+o4H9R271Pl4Z zmyJL;>{S$s!5}upV4S{4#%EYTUkZxnuHM_L@GM-Y<*;m|&+=G`3XZAIm->b4fs zLJP&}P;;E)5|Y%uqX4QS&HbNE+vc*O;bo5>7J71qY(9Pwg@fsN-oL$MupK|ztFZYlmrfDk_F8aHH2cE2 z=1F|q>+-$g#ih#(7RQ8+uCs*j9wZwPtu!c_y8ucjDsmb@H%WZMKdn<(Wk-&#)yA zYlKs@v-ywYe2fuKc-BzxR-_U-yc4Q|2f518(LPJdH3Ud{@OlQgr9DlvB)jd$(-i5+ zW6YHx1rMpgxZ>@u1nOx#;>z(h3DPTrFjR8%zagPwb(Yza!+RPeGCV_2a8i(73r}k@+qq_s@hJVRXhi`t>}V1U>9Ii)QB#s!f(;Vds6t;ze2D|mgea4Y z9i&0nykvA=hg$3lk_l-vU>|wKG8#@Rl0*%zu49WuvESTYRxG#`ZF8y9AB3Mk#ABf9 zCN2>Ql~Y;UJ$UeJ`i3j3mbZiS>OFkZ=b!5PUoPhAz7*O#9m@H~BGBi@x{RcB9kGsg zs$6eH2UhG=42(vtP{A|y1$Lm>XtUd%o z0s(GY=6jO{D?DBgcdV&X%nZk~ceg?QGX#rfHfB3?mXdvo(HRj}(8rJ%wzjy~3HHL1 z@zge$bgX$$qrb%;yt@VF`EtX-ZiCMJ&LG4zK+N=t_vxk+?_e#JailS_G7T<;j1Egr zWN9JOxt8mi$i{oFiD?a~m{N^nPTu6zt6Zx12hLLeo=Ld|!}{`&HJx)G2?V{i#SX9U zNNtlpbslrZDh{sehJ$>_*{U$EkJaxGP2h5CVLBH=r@!>9ya!>d`l8`|^Q_J)^Mp_+e20@XlR50WkVz!gsa^@m zqBd`2RgKVLbeS=&MS4^d{8Ec}?~+OfeTL-1{)dl|G|#|hy0%!)O+ECAsmzvGU@GiO zmL{D?eKZp4yKJfe-PXt;pON`)j>Gdp0!}a9sCyu2iv7RM5IC zamVoh?Gn$|O8k2{hPkDA(&ZVy4HK~@=(KF?`$)WImAHm{a9v*O_McRB)mom~=C>J7 z?pP{WL8&=*ejq{bhFr9i?WcyX$0~A^-Am*JF~$`>lEbtdW0L$EqK$c30d+`&qEaQ@ zynUDh_d2gBx)-$DoGOCWJY4Eb&OvSRy-Kg;jTEiWU1A};f-)1bPKd&mLK|r=%sID|2H*8@86;zkOVlmHfP>HYWLy1x? z<;7XOPwE7U`r_^wRm9ikyf9*JbuJuIZoM>{$wNqxrsTZWv0(H;ZnZ*7UanzW_LEjp zOZVxcX&=jFMwmdVZC?e-&n&SCVra5F@!w})`g#nfrApMe!f&G=3fDGtG`T#O9e?m@ zeBejkTJky*tP)|!4_BDd@xaEK@y<`;U`oP+sFJVQyNequ3{?0 zSt-PW{wB#2zh6?&+$%-#`_Z?p1SMgN^_H0mZvQhkfWA-~2E}*=MrRHTTG-pKo#K?T zF$8c>+tRq~D{bg`Gm^H`|ByB^H)LliTG(eX?U}xhEL%#y{BwDyw^&1$Kz81oWG)&p z%cfRVawInL{SRs2L7UEX%~=|ZgX^zO@p#$7D$(_kz}gx)tDWd~3YH^*LXyJ_y;v?2 zY)OW8=`dTvJr!Pe8)`58DjN(<#mi_XRM8B1iopF!4_&3U5eK1Sf6HBHDIyj{S3}p= zviyve?+%ejEQ?yhiagwE(Fh-+sCT1)no^on0yf6)=Ut93t3Z?sCfJC37D;cOfch|R z)WG=%FB^B$HdYgsoJo9M6{P0GTQxJ@Ij=b6=bv##?;N7W> zbvoU5>eyQAb4_baho+_6%ACoV(p)O$qNKHHu@6s~DelTo7+lV@i(-SwNop7OOd=7# zCI5KWGSU?#mKGA4(hdakZhWwnamz$_26$kfLk*~st;WRG>d0L*g7M#?v-lBm$>TTiBH8A9I;GTC=Mh`5Ck zl;Yma!cv9>*?i+ysD+bK-ZdSCVI$Xl`}=9~a%J#tyi?#(nam9y`0z};)?{4w7E#7!=VLV##RlV$~(`7l%7_81?y6$I2my_@AE_=a#gvV z;7fw(tUPvO5FXZO`peU&kUK(|O60LSJT#(2m<<(gs}k+4k81s4v+RpclSx|^k!fWj#%`F$H{w!v&)19^Y}&jZ?9+g9Cf^1h9P^f$LdQy?rmlq3zV_8; z@d=nGwC)+8F~hcva$ux584|%6+;_|5tqx^+{A=d3XNS)~7a>}Q?^RMEZ<;{*&8cC_ zC%t6sB>|ImRhD%_@ilZSZ`@Qirk!cP=0OTUS6SZ_^J`nUxgp76rtiBX^rVZ^S*oao zo6<5pgL2VuWt16IV)E}LVyO%5!p-M|ru-$nZHbHefUEY#@ekJ5%*?~N*|cv>)5cS) zOig5^&}cTrawz+5Dn^S0R#wfIWpiZfF~?~mu%I{1;mw17MZ+WpouYC|2qXSa zV>u3%SGk54%T2Q;WXh2`HGBN;@z2RO(>=V+&Kf&GGe+G6=rEH6bKZF=e&kSVs|=mB zX~s_Sg%X45O)LCsP!hPL5|zjwMllyVLKo`u{TYDiXDHM@arX_i#ME!pxHLbGW_#?_ z@F!sA&IREq6J6wPgqM-rzvL}#oGEwVrttj2&h?lzlHmu4?s6$lBuHD+YT#8}1(=6< zFq!wn5_Tnf6=|uwY}Lo=D3=mGl+Nv}8nz94E#PvG{!C9jH~7_;2~ndj9V?Sm;zU_* zkra#+dE9#j#91)|wE1^a5`AK#`gi_X?k!=iy|s&q9S(Q~*mW{8M_ZNX#zdt;mw)x! z5qkdCoX*E0wxPEBmK3V%!ZaLnzDAj|yUk|vlK+Urz81xnqGIGXUT06W$yU`WX{eOj zy39iU%6efcB3_8sGG<`PGBJTZ(TH;7o32v;HgR$6NkGN$z!9tvb^3xNpBHwG>)%4$3M zmFfguFnRBfIjL_%^98q}S zh;dU6N+25GS-*Zu*jnN>Z-d}7!wdxry-)>b9Ir}t2ZCc^CbRs0D-Sm)olW_vu_ zF;fGtmCGUFK!Q@bH;NyKw_Ud%9TrxZ3=h%+h)8Zy#IYRbi0o?`vidN&1X588+Qx~% zCs@zG`%^>DhP5)XIj6^>mXC=e0+f1ox?eYOKHMBOA0$st85C7_IYv#*?{vgH=tkK5 z9tB=1xt%LhD9DHpu1_U0lsQw|a&(-M*g|g*#~vl0fh8sOd8w3?-wJeDorIJ5LtlDu zo`L(0d8t3xpA%Z&jBU(W<(+_GBrTMU8rMks+ZnX6+{8rvS1Da|tiTQ3{ojwO5jV<=JH;TDx(;~r| zSA`>KIaVW*J&3IhpMLLsQf##4+gfWrYCmQt9g7i~QCZ$ZVJt1^m~&3h6?D?+j^5$J3PO9CdERIt1CLH*q;bc4sU)+*r!LGe3K9e() zPlL(Eu?oUR?`@o@HjMi|AB}U!vo|SF44jyCt$l;$wJ${d$IE22P^+CTk(K+XX7#TX z{0&3nW4tx^E>_POOY8gb!e0$*>HFd1wP&C{(&Jvck`=*IPf&BwUA*1#Ob^Xnpu}QH z5^^zQj5)rqU{Ob0xZ%63VerVEt~Y~N0)gcQU3^^aTx_6sQ(gf5=jmQfhe5p2A<3v)#4e%2PiR%Mw_4=bRcY(Nu15 zDJU$%XnAfPxAYZm(I8n?cJ@J zH(k~b(=Np9pCwfO!MY+@=~bF~6TyiDF?la9*rHO9|AftVNTcGYOfYu~79_ z+GI;Gi}*S7yOwuo42Lf_OqtiI;)kuZh@cgPW7qBuMwZw9F_ppl9L?QF7AZHmG9~`-+u6aXpp=yNvIL#x{ zj?o@!^D2ik`KH2(qN1;HCkLA-iS(OT8R{K@aWZK@1LG%yK|jJl)#8%FR;5>cO#!TA zCwUjJX+%tt+myH@()X;6BAmmWR*$F}?3Tlr@^a)nrda8OiO|x>rNf>qAq%PQ^7JpY zsW7LCNcMuCEFQ5NynXB9=~Z`)SFBDX!CT4nlV~4tFat2=QYny}$`TQ}&C0T~>3Bw@ zKbV321;20&c=`F*7g?9c-PQ^cIfslchHPG`gF9(EtK}KwVQU->dku_A0Tv6Bof#e5 zC8k=8!%!BUL7)Boo6>djhh%S?PD+mDb}Sra&e)%-A18COOv5eJxZB63b-YnGF$eg1 za|#NJUf)#>yMI;e%s3g=@_Jw<(81hV6k&uCg>>_)lBZQ$eJ0n|gr_xni(Ro>hKdr? zytwS#)aKluk+?>1_S%ux7d~O%c5p#tm6sU;UD+|voDRDA&99?bt1cHR;0>lgG-Sbn zB-T8991*3ccPK%_Rg1~1SRTXG@al4gHVApFmlk9+gewc>n*K^#3XG#5=r%~PigOQb zZxO@qkY(@@&!+a?zU6z+Xvo6CBypYCqk)j;4II#8-SgdzO=XiAyHWozQ_kFb3SMCe z;8f7UE*)_ojrfR+X^r6Z158y?%W&-&$)3lD#XgIQhrZQ+q2yfo3+J&eym1znw_;LSVS3^DA7h|&0weU;KVT^L%S z(^PLdIliEpk?8FP_H`2JnF2ZFk!i1MqqDiOr0TWU`}N>u%mi5{&KlaidmSt2?KURM z1kMeK*)Xgc0`ikA~EUq2Qz07^V|B&25&JJjN8I0)Ag^D z)um)zmIk+84<>-T(zf^Ubw!v>PBzDoU^b&;y=I*VA_9#@9~b}}1is80NxD>bi^TM+ zZk4tuu7SI@6Y@!iTc3WJ?lZQtK~g?k2mCw0yl&+w^| zkK#>^K^oP=rt1gd_cCBCS3FM!?%6V|`G502v|PI0? z1E@O|468a@f4$~H{pyG?!GHv=Dojj`IF}l~j(iuFwH|XKzXIn)+lBhceAIc58s}!3 zdn@akN{@hyk7YIo$Js=wVodMbWXZja$J9Ve4>;JgqL)K zLYSf%@TO#WPzb;xK%O3a`*nh$tpBT*;+vW$ zxAVM1@#!{sL0`+=es?IfS6;SC`|zC9B_T|w@N>b1s&{X2o7b;hW+JXO)y~xwBU~*7 zv05Z^j~Sz8-yHX@W{!Gis~0fX_7ftVIgiZaFy-OP%)hQ!!FYmobOeu5PbIt*URa z)k2zRO4xultZKK@KZpI=tGD2`2FG8ILQomk_^u8YQkBiG6pNxg@Ucp1!a?zo%AbypyNW6TJ)y-`l?O&%bQaSJKGTX&;<4kRHv5Wk z?I5(d@{U;@G_>U3zuDus;!Ml;L(XsmuPF!COMOyhA1;I zhFW$IDpujbgWN0nrZN_YYaHyAp-MN(UAoRcoKx0(C(xC9bcnxujEy{*BVyS!J?(9{ zum~iuS`o9QAFB3ZlohT~sQ<1i*-(5x7Ha8hY^Reb3XY{6**{Ps`7>noCkGybco= zOz{rvqvDxBq!U`$ohpYH|CpcpU1w?TlNh{uZzEjiNepv7GJ_*Z;B$;fjPR`P?qY34cw{AWdCV!R;lkML_s zmX}SRn6h%ajuhPjv&BQ^OlmqLXfXPdZeeuAH%%JQmv|!R9e;%kgWPfgJxu7EwII$+ zgX(QfQdUR&(WG@TFS#A@Uf$QJ0VQK@+bi-l`V7^o>9phY!E9cLOMt$|Z{pvK6i$|! zBjrg@&p)Qo{gtoT7yYt{oH`1>F67prs43PF$|L-gpR@w$e9IcIMR5^Pe+^ep6n)D4>{``HRVd~pTPwE6 z*C0Q=tQ;RY;Y4^o9RXLkN`^VO4fBVJ1xzVhH|fBv=(MMewhUH0k<0a5CMEKP0KczA zyz`Nd$dMVA?@J`#CE@xtlR!s*7B45dAaB?STsZ#rgCi?c#7~Y& zZ3ekzoo1z(H=hn8*L0vZy~lN0cZ+*TG~DA*Y@FN3>Y0hqS*59|Q;~e%jTdI_(0;wC z%6Ho&o{~*0?l@ejq;!7oI|7|%!l5bm&5KXo6Fhgq&)2*%QjQ%PVcgu?NSZwhA{}w6 zI^Nz;Dx2}6rPBFA;68Gq&gUKVvb^MJN8{nl5P&SW3rM4=N2euAg&9>AQMgE|M}zef zj4(34;Ty5udlBp?)OHtzikPH)y9@}M9n$OEu|r=)Hnh^*$lGt6ks-mGVO)FpUY8L9 z3rtwtuD~|MmspQ2ihX2A1X|)4H}(2ZRaxvL#^c84R3oPitrPh5CN38`KRS6S8RlBK z%vCvr4TPJ%!WDXpkPMc@H`j++eQ-Xty2}y?5k3hbT;$m1l4=bST^naK`88iZus!xk zx1?%cn$>w`CyPDIIL*L#Q=LskRawR@qTgRuuAy=UqlTCCv-?c-W-dYAGM}>y!U|<_zo(&e z8t?CvUG-4zgtyub@Fzrs!shwPm$vOys@>6-CM07ilD+5VUzu-LCF;=-gfhTd%Icn@rd=O6IPnVQ3 z9FtC47qItL%iz$-NsME)mKjmXH_6(LEdGW(B5Fg30N&fr`AJ~eGS;Dyp}k#;$dlVy|M26ORoNDD>SeKOKK(!aOtGhpbD{ z(XwAqvmUIgsdJbmEGHYYZspFX*}6sX=OKCDQ}QPE0DBF!ShNO2V4&!`WdZ81C* zL!*y$ctB9Vjqt9h|tkf^aR_T-oVDk*)U#2DTUM>JF>hX6UpXE;d=BgAw4# zVe$bF)w_l3a_0^_-MdGF%d<0djwCu~(C|a$FGw-2tjY~ z?)vdg>C=YqM)#zBwFG3es(HRu8zZ59kIy?*R@x>onjz&C0&0R;9z49loS>)7*))P03=%frb$6rxn6zuE$q@rSW9@w|pZr|VxrTo;n z!1$>nZ&S2+b*F-n(l}=t>#6bU>1%1W94Q8+&U%#v#&bU z%JQ0}gxb%Mf4Qi74~cWx-xQOeor=ZNFKSM(@S^{eYRmZf8ULrZO`fLJBdc<_FG&C2e=^iO`J4hi6Uj_SiegZ_`Q?{A*k%Q<+Vy`b$QczPmuzaphx;5W*?t0+?soH zf=vvWVn@O<0T@IC1DjlaJ4|n`lQR09$jP?b9yztVdpS^Vzj^OZ*$z+T{k^Z#2rcBz zoO1J`o6T~^2`bLI6ir&=Pxddx8W1tB`Qllbb?A@fBO_&k{$wd#-~RmlV%NS*>LVxn zV;B48em(|69XEpw_hfbRz@U`CMF{+-u445zBfb;z}h~s7eZj=m0h+G%NvezG@JkWy8enZy0T(C7bSwNy>deS=8`62>A=1 zNmBm+(v^O0bxlRn&Q^{jC7D};@T0v`j|0g0Pi*utj4(xG#;Fv&Z&S3;=87}?M@dzr z+Bqrbn>u2|GRd!||oBW7-nl zYeETRhfI<UO`iO;%(=5_@Ix_LJA2uX>3Ax<1oZ z?)hF>(_~XPVF*zB6Q(oQIOc@EL5}t@`z)qbX7bVyO5zjg$4T+dmx*Ss8Z|(fC-N9BE6kmE)Va zbPpA27jeWyEx1gBp`$0B|}%ZHnZJAZiu{CLrgY} zt$-A=kTHyZ&M799sTN{wd_A8vg+{0rCp*n{<7@S00WP30OKGJtrn2Y zls^)9jczW^o1(zCf;KpjSdh#|-O21bpMLZ!>_){WNxG6D`{w1_zm);>sn2uJaqWth zy%TS;Xf0uh0JXQ;px{0WZ9h}g(%4i-5n9P4&?FANk>(c+2I3FiB>Q)$nB{`*IZQjG z7LTwlC0E+H&m)dI_a8MlhoKI&sx^xktYw}VN2=yS=-L706^B+lboQu~2`6PESk%t5 zbOOgH8v-lHN%ZHbW67pk5wpun2-UxcM1T>FJxxKn3?iRn3FUim@hrj@IR_n6*=i&_ zfG50_9yLiGQZS)h=O^HFpetl18;MD2Srxsx6*NU=xXn=Kw0ezDMu}CusaUid0N{Jo zZIXi{JY<{!N#8?J6q>!f0S-x4V1f3XyqtBbV}-uU@%XZn`Dqm&5Npsrqa;&FEyU51 ztqrp7+P$|PfK~h{Qa9t_iE)X>qdZq$54p4Qe4w&EpicTD5$(o^&NpU{a zv*M2g+gxCsM$RqdkLC(6h|lTv`K9uT&W{+M7i6OFh>|JQK>M-6yMs5^Jb-%sbVFfwI!XjL zSMe9z;|k*{0Uz_{gG$&q*<;guL1U(A#yj7%d8<3JHN0Mz7#yDK_pypG{SW;rgjf2G zt*J)y{fd3gOSIEA)gwJX?Zq8fm-IB#Ad5<|SRh1c%cdjO+by89GMYEm;9VnzWz zV*$nh>Hz#ICG;y|2ruW3IRsYojpM6fxbKA^;+ubBayf?P`KPH`Mskl|;Y1WQ)+Y=L6i(qJBy>J^axzQP6%U z3eZd$Jeo-|G%SJdX-gW^catmj%;CAcvsV%BuRTpR{!Lv4%sa!*~rU8T+M2UV}OI z_M(cMnJgMq(#}o7G@CL07~q_D9WW_awCr(xqeH1$+uh9@C_%S;a)fpt<&r>CoefS0{9bQB`b>ZC_Mar?(h_MGgt;DLjA& z)9|6PQPkRQ&=&GEK3OdYa0W6t#~pGy_V}hD%$Dg40p({++%6n*pN#T8XfzPpduEQ^ z_B%LXm1IM~$2s;C60zM?4F17=HOx~yWJatOC*^|%=(x|ndX&kbPl@EWw2czxSj4#j zqeR`6=Om8UJkdx-(Nx`NOt%rLiOS&{)POHj-vj6|QN2)&F2SI=lH+*{-divV%Gu<5 zP^uLx=%4PERV=`au{h_Sj@2x65Jr`a#vNp5Cn~BskUzCf$y9lJ6qh7PayH|L<57?Y z$v=%1NRm!lWNL;MD5pG*DO(~`cFN>P$aX(GG3%34kZ9q91BN*xjN}S73N-cutwRYV zy}Xl_F|OdFC!Au9SYwV-=?B_~Py;@EykxfE0MAZ;=4!=(R?DG^EBb~Jm}8AM$rCsL zGP`Y5BN-m~{ULYT zuWwdHishlUR{kT}K-t^IR34v98U=1`gX$O7vNf{Wo3RXI3YQMd?bkTxjG7hp1nBa{ z*7o?JmI=fJZw}9bdHLu%^{J#w-Ijd=!>HFR@z}>S>ZQx%0HB_~A6g8HZo%*FrGi-^ z5IWAJfT_`a_aFLFvd$v=SY-;kr4mcDCewR!#zd^A4*onNIf8x9i~?Ef+waHI8u4!fyYkfqG5C? z@ehkGCbp8^${8&!# zU4L+4nIt%Dj4zg>AP<^o>`6KzhVYilMI!>EnF-^b)fys@M0*DIXo3&rZs+r*Xlo*t zXqGSm8wYpAM1a^UPL9Qgt3AS#O+d3#zM1X9q!!X$UPu9s1>j@)ox3l`Q%#NzMr8*3 z8U31TO+M7>`hugodX_kXE=TeJJN{<0D5bMPw2~2P8oYNNYeW^dl>gM*= z3|gpFhBuEX5d*GsjGlUqD663|e5I~}t>e0!80@XW9t*4l7a9I+bpHV6hQ;GRch+_m z_gQExeDRRX8*_uxoOM4mErmdl;q#<|8CPZ52wqr&NXWk+^zFxLn;VS<#Rj77H}2Wv zj@m)D_+)MaJe>B)9S5~aVMw0a!?TG<1?9*-VQl(FInTW}6gNbZTH4v#dACh(Z5H6F z(y+)N{{S!bAEs$&QGLgZtS#LV*4|6UM=RzldRc#~rh1GJMm?%i2Qf$QJxcy&o=>sC zZtcAl(C*_I8%NJ}sOchZPeX__$JDNt;T)4DOGa>W#&O3%N?AxL(%Qk>&bSanP67}N zq~j%32e-XSBV~75*DWWE!EVwomigLolh5-IdBsX9auy5uF66dL=~&vt_+|@|7q9&& zpk0$oD*4w15ndsWE&k~}vxD*RL5#L=R2D!a^BAu!j4$Cz(ChSjy`hY)ykb{iasdmE zeoaaR{R!_RyM3`re7qgOK`cN&KGkAKskhTPj?wp$@?@{4o^w&l=#&)u)2;_TI=tj;Q!EB^RR!O^z=M@ri=sHAyX_Wr}g98Zrb4|f}V7KWT z2BWK5>6*Iv#_IC=0<6(m#0gV@oSp`8+nUgw7D?8SE!F0ut6Zns);nup#!vt+A;|gr zpnsR&tqDjGP4;~rndaR?CBpvz4mRGA=a>47d-mtvmB_U~mlCOs97P~T!o)B#eo5q- zPuN*p@onw(-nwioZyw43qt005D5M^{x^x4k4_Yy4D>LMiZjlj|BoRO#X;m5DAZZw5 z3OM_{xcREN{fwnbk=4)r;RJTJ&|2Lt-HYWCPTZ4%+0VWy;?pCWXR=uv%n>Bb=~h>a zh`|ll3OZosqD*eW>~tt0a`F|C^Y>0pJ+bfgsX<6{4fJ|^$7kAEcDI}41tCbs2R`G2 z>?nbYrt!oYY;irNjU2J6v5?Is#wVr$1Md9wG*FII1+93_=1XYIHj&%hTtv7jDVJ&- z9tS{vxu{1nzi@8#YoD}gicUz!7{Jfn1EA~Lqhv|Tv4nyvXx0mO@`XSl4$?k%4x*F$ zk4bcTvEt$)18pM`010D(*FM;xL-c*9>XVCRk4}-JjgIZH9$XH@@_KWQDA`+L8>y1z zl@XpPNnv+nbyb#y#j46BsmRfiun04}+{P`G=NTxX*7{JK*l*p5^OZqD

ptP)3lf*Hn#73s>(@?iWEqQ$Ry-tvD+T>)Qr-|ke0$*>CCs9nviB5YH^MEx7TilCd@9!FseQkYZAF6yC6F9)9I>+MNJt4GZRwX~Z9+#|A*%&b9GJy$=U;Y^iu z8bMaGDj6OpQt#E6WkUWPIQ?mekii0QRYLMH>xyZNAVQAh%nM+?|A+ zgU_&~wl@?PYFb_H+-D~pLiW!+IG{J8Q7n;3wT-m60RpiZ$5Ku?IQ*yr=!)x74AP_} zM({s{3Y8~3bDmGqrGdK>tk)MZGOHLq^^WRS=n$bAqHU2wV^Onh*36JSr@bHxVJrV0`gFJt7y>kc`BIvT^|#1KXNq7Au%A z`$WvqyJ1J9BKza7(v2h~ws^L!7h#dp9OvZx(d0!F!ze^mExnZFd>@(>VY(t_mSL79 z^T{9DjU+DF@05{$j8RzhQh(BieFY?rl?u!s$a1a7$iOu{6WKJR4W)v%I}D6{Xe1U2 zU!G~GTQ_^D&(m)yKr*HaI?V2h36Om^IrELV0Mv}9D+53?x=+1wY zdy;z9ZpVv?Wk1F@amO>H7oTdf0RI3LhSMWt;Es71>6(c;qMWi%qAe~75)*RFVU|(1 zbBqN}02v24J@}=svWm7jio`_}Gl{(PkMBbB5&<6_Kpxn|O)}nw{!+AZTqj4s1Scw> z0fkaH1HZjQf{1k8N;zN4kt3E1gRp_YR~f^5;P5d|RoE`h?&4iNi4w+}@xC@8HjezB z{{ZM|Xlp3i_OAui^GyJfZKH4ao|eJuk7GbtO?n`(n&R^AGd!&d|_ z7fJA)u=AYX>H%`{KL`#w1@HAWOUWrpy%j8txHI@3+`6}j7Y#p zIj0oV^}i8EY>2u`B&AQ47*n`A9<10n`NnDe7PBS2Zi|vi3TYzPK&m3J(BOsogI#gQ^M;4l? zwYQ4WXFM;Mj$7{zNzcAIRH`B@Hg}fywjXSYM})hO5?M$te!j=^#wmS|MRUbB_VBs3 zwk8G%pGtsp{XFzJrnl@@NUhEL!swH7B$w2rw61ve$TUT6!%m*Dk?JM)5?gKq5`UKz zqbON2O9WFaK5K@Q1t2d^Vo&2j-(ylkI2B-mc2NwYZWwdMKA(+Cu=Few=0h})F;v~O zXJ{Srekgu{WM(Pv5H>_Hw4PZQcw0l;~Pc zogeR;SanTF*Z8k4OmUxNUOzL|s(DDJg(5kTT!Yg*9C4qmE!)u;Bsz@H zK)Yao!Uh-3bI)_z8L0LifLbQhClgI786?2kFu?%n_+q8{DsIEgtBCV;98zw;2&_p# z_y7j0<}Ss7jxiXckF4lq6asxrj2V)TJ!j#k(Wq<3cMPov)yTdshRLnL;C$!vij^AHso zRtNt8Y4)Ms!_YRNezOIQ6fuZnraup@N)}U~dpYjQ4T!=ba=~&56&z9(HqUOPd2t*_ z0+YdY>O~Y8O7wRey$nD`!Fgb#E&2S=VMzIkqBiwh_v4(3RD+}gE&G-t1SOC2F#iBb zu|w=fH|S;Ij|^*`CcJ2Lt7$Hs2=gB}jy(5fJP)T@6P#h#w_Tf8?DO_tr|D@8_lRs~ zxV%Q(o?#6L$Mr-8e>{rIJg!<@2|0R3y>78f2sY+6j18d2i~u`v{i?buXp$6N?4W|n zjE`*5iWY?4HN5*CmdXwphAL0!lzw#aCBT;P&T(ty<7;ctA6D&yDbL>8+u4*N0jnX4h zVP7q!A@EKm!)zpd;0JDcQEa7bH$`bKEWXdE-9l}lPBwr+An2d8gpk6i^T72G5be{!C=Rv-cfasm_A{(I3~3enA~$d>+L43V=H zRLB5y9Q%$xIu;nOV?8X!_PZwjOb`jk!R`7~9RO+)2=VG+5Cp33$X;=Z9q3sy7-YMi zA@`z*aHT^WAE>EG3AzZ105Il8c>xN=#s+b~pzL^}dzOkg3@oxZ4VNQ~f0R;H>~|!P zs!6v@tcVT?9259vo~WhF<|q_QT$UVf$j>L+^P_qMRrW}-$g6}b6#ifHnggB;!kb(+ zUxByZ;Gg-;LUcoMaB+f4{C}n@C1SY}X?j+v;w#3t(`}}m)NXBxNI~70_7q!=HF6c( zH=haq#5BuoIUB`N{kHccg|n5CHBtwpwldxM80%T5R z>X>$nHwr0I_{}V^c@TDZY8op(MxZK|a1kgdXFk?}l;T(cJ@k*VRbb;FOghat1j2;+8 zk)Otk(5_TK?dP;AimHV511BA5Jqp<}W!MN&q+^m#U_1S4U)alJvA_}4;gfriOU6cX z?SN`n)GoZ4p6kh%cF=&GiaogIjcUrI-O=oEm7kQ_7+@|4Bj_ktBeG?Il!95d$_v zY=O-lXiyGT5t?*`VKK+XD#(jOp)pTFuzf~R4Xd&Cq?VBp`K$Jksu{1P^>u7h;aalH zYj$UH$XL~^yp5PD($H)IX3JHGt+E;-niSmFM#rujnyM#KMO#MoYSvr1$4vJ1ioem% zmu00<7V_;vs9o5=9AlcSc!LslN-}Zf^#1_ys7V#=W0+W;NsT%G0M$%{eG%OM0O9`t z75@O)K>|GxhCjO@IXT=$eltt#e?->6eVR@O_=*1jxKjhrRD&0eM_jni{{W3E=m*gf zFUAfqc=+H@eGL#<$@>$WobNpT28d3zGEl-0l>{zv#(gxUQtX3EVopgU1TA6zEn-+MS9h@jw3n*2(_> pl+{z{i2SYNZ~S@sn!6uGuqwx?rY%HseZx@^fIm}CRL&|8|Jf_~Ehhi~ literal 0 HcmV?d00001 diff --git a/Samples/Monkeys/Images/Howler.jpg b/Samples/Monkeys/Images/Howler.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19afb3a0ce4b71561b93ec17fb41ae19606d11b9 GIT binary patch literal 28043 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

96!#qdF?%aL zW#Jg{po#^Sc4h%~DAB+1bYR%GfFwREu9!;!U)DhcT_E^e_?m0bV z6ephY3T~&mQa{7r>7G;v9w1GwKTaD-wRK&B4B*VCnR=42SGzn%C=ZvH*UwAaq^`eO zoX82V#wX?~4jF!!=UaL; zU8R`w2%&Is5w@p^w0Rs1X{!u~N}r{m>I-AiJb@y(BS9p9ZYaa@u;aMF(Q5R7NASa< zZWuFS_-bo?mYUsfftHe<0Z$kQ@**e$>%bb*y@5cWORp0O>yDnJsg0+nEAy#lBw>f! zxYk=?eL&7W<_`%BQ@tEB!#9H(vIt4qGNW>Rv8Ahbb<0K9jwcgB;c|qB&gIzTayxVD zopUH@BOvhxPt-6~$-1uGs^M_Y8|`Aia!AHG&`lpRn$)n3>-a{?&6}p)&2Osxw@{5D zA(9k`NMlwXnC(0dFFtfCw{F9JlJ?XJhV2K4tP3))PeD;3NbqXvHx13~y|q`i+JWA4 z0AFC@5b4New_Ls=hN&qYQQ^rjP1ywh01(IYn*kFj=m4@sT9!T0Gtp$+Re6+Q0G4qrp)w$ z>0_s~RGQWsjE8F?a53seoKTn46%VRHu1;f6s9ED&9m;=}v#d7<^3O6zl`3Hn!!+{8 zvIPD;*ueME6G^DqyeYtyBN003cBWjKN~wH6cpsT`M5@eT@IQD_^o3B;&joCq2Osj53@W8R~7>4^as zXylT3;CDJ^-AY%I-JuHrCV}`FRSjURrQEYM69-oVAcoE`e!IEWzlCPT%MP5wqh)4| zcZ^I?gB2=sk-YL;3_B?YGjKDU0Z)0!jYf%oif+y?M;_1-20FB3B3;;C5z=@xK`4w zO*>Lfk&tQKcHojp#(i~P>Bv&mox%>(Zql{llBuoU6fj86Z z3HHM2JxSa^i�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 Monkeys { get; set; } + + static MonkeyHelper() + { + Monkeys = new ObservableCollection + { + new Monkey + { + Name = "Baboon", + Location = "Africa & Asia", + Details = "Baboons are African and Arabian Old World monkeys belonging to the genus Papio, part of the subfamily Cercopithecinae.", + Image = ImageSource.FromResource("Samples.Monkeys.Images.Baboon.jpg", System.Reflection.Assembly.GetCallingAssembly()) + }, + new Monkey + { + Name = "Capuchin Monkey", + Location = "Central & South America", + Details = "The capuchin monkeys are New World monkeys of the subfamily Cebinae. Prior to 2011, the subfamily contained only a single genus, Cebus.", + Image = ImageSource.FromResource("Samples.Monkeys.Images.Capuchin.jpg", System.Reflection.Assembly.GetCallingAssembly()) + }, + new Monkey + { + Name = "Blue Monkey", + Location = "Central and East Africa", + Details = "The blue monkey or diademed monkey is a species of Old World monkey native to Central and East Africa, ranging from the upper Congo River basin east to the East African Rift and south to northern Angola and Zambia", + Image = ImageSource.FromResource("Samples.Monkeys.Images.BlueMonkey.jpg", System.Reflection.Assembly.GetCallingAssembly()) + }, + new Monkey + { + Name = "Squirrel Monkey", + Location = "Central & South America", + Details = "The squirrel monkeys are the New World monkeys of the genus Saimiri. They are the only genus in the subfamily Saimirinae. The name of the genus Saimiri is of Tupi origin, and was also used as an English name by early researchers.", + Image = ImageSource.FromResource("Samples.Monkeys.Images.Squirrel.jpg", System.Reflection.Assembly.GetCallingAssembly()) + }, + new Monkey + { + Name = "Golden Lion Tamarin", + Location = "Brazil", + Details = "The golden lion tamarin also known as the golden marmoset, is a small New World monkey of the family Callitrichidae.", + Image = ImageSource.FromResource("Samples.Monkeys.Images.GoldenLionTamarin.jpg", System.Reflection.Assembly.GetCallingAssembly()) + }, + new Monkey + { + Name = "Howler Monkey", + Location = "South America", + Details = "Howler monkeys are among the largest of the New World monkeys. Fifteen species are currently recognised. Previously classified in the family Cebidae, they are now placed in the family Atelidae.", + Image = ImageSource.FromResource("Samples.Monkeys.Images.Howler.jpg", System.Reflection.Assembly.GetCallingAssembly()) + } + }; + } + } +} diff --git a/Samples/Monkeys/MonkeysView.xaml b/Samples/Monkeys/MonkeysView.xaml new file mode 100644 index 0000000..e78737b --- /dev/null +++ b/Samples/Monkeys/MonkeysView.xaml @@ -0,0 +1,54 @@ + + + + + + + diff --git a/Samples/Monkeys/MonkeysView.xaml.cs b/Samples/Monkeys/MonkeysView.xaml.cs new file mode 100644 index 0000000..c9eefd6 --- /dev/null +++ b/Samples/Monkeys/MonkeysView.xaml.cs @@ -0,0 +1,15 @@ +using Monkeys.ViewModels; +using Xamarin.Forms; + +namespace Monkeys.Views +{ + public partial class MonkeysView : ContentPage + { + public MonkeysView() + { + InitializeComponent(); + + BindingContext = new MonkeysViewModel(); + } + } +} diff --git a/Samples/Monkeys/MonkeysViewModel.cs b/Samples/Monkeys/MonkeysViewModel.cs new file mode 100644 index 0000000..bbbb09a --- /dev/null +++ b/Samples/Monkeys/MonkeysViewModel.cs @@ -0,0 +1,16 @@ +using Monkeys.Helpers; +using Monkeys.Models; +using System.Collections.ObjectModel; + +namespace Monkeys.ViewModels +{ + public class MonkeysViewModel + { + public ObservableCollection Monkeys { get; set; } + + public MonkeysViewModel() + { + Monkeys = MonkeyHelper.Monkeys; + } + } +} diff --git a/Samples/MonkeysSample.cs b/Samples/MonkeysSample.cs new file mode 100644 index 0000000..ea7b23a --- /dev/null +++ b/Samples/MonkeysSample.cs @@ -0,0 +1,24 @@ +using Ooui; +using System; +using System.Collections.Generic; +using System.Text; +using Xamarin.Forms; + +namespace Samples +{ + public class MonkeysSample : ISample + { + public string Title => "Xamarin.Forms Monkeys"; + + public Ooui.Element CreateElement() + { + var page = new Monkeys.Views.MonkeysView(); + return page.GetOouiElement(); + } + + public void Publish() + { + UI.Publish("/monkeys", CreateElement); + } + } +} diff --git a/Samples/Program.cs b/Samples/Program.cs index 1c7466d..13921dc 100644 --- a/Samples/Program.cs +++ b/Samples/Program.cs @@ -25,6 +25,7 @@ namespace Samples } } + new EntryListViewSample().Publish(); new ButtonSample ().Publish (); new TodoSample ().Publish (); new DrawSample ().Publish (); @@ -32,8 +33,10 @@ namespace Samples new DisplayAlertSample ().Publish (); new DotMatrixClockSample().Publish(); new EditorSample().Publish(); + new MonkeysSample().Publish(); new SearchBarSample().Publish(); new SliderSample().Publish(); + new SwitchListViewSample().Publish(); new TimePickerSample().Publish(); new TipCalcSample().Publish(); new WeatherAppSample().Publish(); diff --git a/Samples/Samples.csproj b/Samples/Samples.csproj index bdbc539..3ba2b0d 100644 --- a/Samples/Samples.csproj +++ b/Samples/Samples.csproj @@ -17,6 +17,12 @@ + + + + + + @@ -41,6 +47,9 @@ MSBuild:Compile + + MSBuild:Compile + MSBuild:Compile @@ -56,6 +65,13 @@ + + + + + + +