parent
8190f9103c
commit
900a0095c8
|
@ -14,7 +14,7 @@ namespace Ooui.Forms.Cells
|
||||||
|
|
||||||
public virtual CellView GetCell(Cell item, CellView reusableView, List listView)
|
public virtual CellView GetCell(Cell item, CellView reusableView, List listView)
|
||||||
{
|
{
|
||||||
var nativeCell = reusableView as CellView ?? GetCellInstance(item);
|
var nativeCell = reusableView ?? GetCellInstance (item);
|
||||||
|
|
||||||
nativeCell.Cell = item;
|
nativeCell.Cell = item;
|
||||||
|
|
||||||
|
@ -46,14 +46,12 @@ namespace Ooui.Forms.Cells
|
||||||
|
|
||||||
protected void UpdateBackground(CellView tableViewCell, Cell cell)
|
protected void UpdateBackground(CellView tableViewCell, Cell cell)
|
||||||
{
|
{
|
||||||
var defaultColor = Xamarin.Forms.Color.White.ToOouiColor();
|
var backgroundColor = Xamarin.Forms.Color.Default;
|
||||||
Color backgroundColor = defaultColor;
|
|
||||||
|
|
||||||
if (cell.RealParent is VisualElement element)
|
if (backgroundColor == Xamarin.Forms.Color.Default && cell.RealParent is VisualElement element)
|
||||||
backgroundColor = element.BackgroundColor ==
|
backgroundColor = element.BackgroundColor;
|
||||||
Xamarin.Forms.Color.Default ? backgroundColor : element.BackgroundColor.ToOouiColor();
|
|
||||||
|
|
||||||
tableViewCell.Style.BackgroundColor = backgroundColor;
|
tableViewCell.Style.BackgroundColor = backgroundColor.ToOouiColor (Xamarin.Forms.Color.White);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void WireUpForceUpdateSizeRequested(Cell cell, CellView nativeCell)
|
protected void WireUpForceUpdateSizeRequested(Cell cell, CellView nativeCell)
|
||||||
|
|
|
@ -23,5 +23,12 @@ namespace Ooui.Forms.Extensions
|
||||||
return defaultColor.ToOouiColor ();
|
return defaultColor.ToOouiColor ();
|
||||||
return color.ToOouiColor ();
|
return color.ToOouiColor ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Color ToOouiColor (this Xamarin.Forms.Color color, Ooui.Color defaultColor)
|
||||||
|
{
|
||||||
|
if (color == Xamarin.Forms.Color.Default)
|
||||||
|
return defaultColor;
|
||||||
|
return color.ToOouiColor ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,40 +5,35 @@ using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
using Xamarin.Forms.Internals;
|
using Xamarin.Forms.Internals;
|
||||||
|
using Ooui.Forms.Cells;
|
||||||
|
|
||||||
namespace Ooui.Forms.Renderers
|
namespace Ooui.Forms.Renderers
|
||||||
{
|
{
|
||||||
public class ListViewRenderer : ViewRenderer<ListView, List>
|
public class ListViewRenderer : ViewRenderer<ListView, List>
|
||||||
{
|
{
|
||||||
private bool _disposed;
|
private bool _disposed;
|
||||||
private List _listView;
|
|
||||||
private List<ListItem> _cells;
|
|
||||||
|
|
||||||
public ListViewRenderer ()
|
public ListViewRenderer ()
|
||||||
{
|
{
|
||||||
_cells = new List<ListItem>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ITemplatedItemsView<Cell> TemplatedItemsView => Element;
|
ITemplatedItemsView<Cell> TemplatedItemsView => Element;
|
||||||
|
|
||||||
protected override void OnElementChanged (ElementChangedEventArgs<ListView> e)
|
protected override void OnElementChanged (ElementChangedEventArgs<ListView> e)
|
||||||
{
|
{
|
||||||
if (e.OldElement != null)
|
if (e.OldElement != null) {
|
||||||
{
|
|
||||||
var templatedItems = TemplatedItemsView.TemplatedItems;
|
var templatedItems = TemplatedItemsView.TemplatedItems;
|
||||||
templatedItems.CollectionChanged -= OnCollectionChanged;
|
templatedItems.CollectionChanged -= OnCollectionChanged;
|
||||||
e.OldElement.ScrollToRequested -= ListView_ScrollToRequested;
|
e.OldElement.ScrollToRequested -= ListView_ScrollToRequested;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.NewElement != null)
|
if (e.NewElement != null) {
|
||||||
{
|
if (Control == null) {
|
||||||
if (Control == null)
|
var list = new List ();
|
||||||
{
|
list.Style.Overflow = "scroll";
|
||||||
_listView = new List();
|
list.Style.Padding = "0";
|
||||||
_listView.Style.Overflow = "scroll";
|
|
||||||
_listView.Style.Padding = "0";
|
|
||||||
|
|
||||||
SetNativeControl(_listView);
|
SetNativeControl (list);
|
||||||
}
|
}
|
||||||
|
|
||||||
var templatedItems = TemplatedItemsView.TemplatedItems;
|
var templatedItems = TemplatedItemsView.TemplatedItems;
|
||||||
|
@ -56,7 +51,7 @@ namespace Ooui.Forms.Renderers
|
||||||
{
|
{
|
||||||
base.OnElementPropertyChanged (sender, e);
|
base.OnElementPropertyChanged (sender, e);
|
||||||
|
|
||||||
if (e.PropertyName == ListView.ItemsSourceProperty.PropertyName)
|
if (e.PropertyName == ItemsView<Cell>.ItemsSourceProperty.PropertyName)
|
||||||
UpdateItems ();
|
UpdateItems ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,11 +61,9 @@ namespace Ooui.Forms.Renderers
|
||||||
|
|
||||||
base.Dispose (disposing);
|
base.Dispose (disposing);
|
||||||
|
|
||||||
if (disposing && !_disposed)
|
if (disposing && !_disposed) {
|
||||||
{
|
|
||||||
|
|
||||||
if (Element != null)
|
if (Element != null) {
|
||||||
{
|
|
||||||
var templatedItems = TemplatedItemsView.TemplatedItems;
|
var templatedItems = TemplatedItemsView.TemplatedItems;
|
||||||
templatedItems.CollectionChanged -= OnCollectionChanged;
|
templatedItems.CollectionChanged -= OnCollectionChanged;
|
||||||
Element.ScrollToRequested -= ListView_ScrollToRequested;
|
Element.ScrollToRequested -= ListView_ScrollToRequested;
|
||||||
|
@ -87,59 +80,66 @@ namespace Ooui.Forms.Renderers
|
||||||
|
|
||||||
private void UnsubscribeCellClicks ()
|
private void UnsubscribeCellClicks ()
|
||||||
{
|
{
|
||||||
foreach (var c in _cells)
|
if (Control == null)
|
||||||
{
|
return;
|
||||||
c.Click -= ListItem_Click;
|
foreach (var c in Control.Children) {
|
||||||
|
if (c is Element e)
|
||||||
|
e.Click -= ListItem_Click;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateItems ()
|
private void UpdateItems ()
|
||||||
{
|
{
|
||||||
UnsubscribeCellClicks();
|
if (Control == null)
|
||||||
_cells.Clear();
|
return;
|
||||||
|
|
||||||
foreach (var child in _listView.Children)
|
var listItems = Control.Children.OfType<ListItem> ().ToList ();
|
||||||
{
|
|
||||||
_listView.RemoveChild (child);
|
|
||||||
}
|
|
||||||
|
|
||||||
var items = TemplatedItemsView.TemplatedItems;
|
var items = TemplatedItemsView.TemplatedItems;
|
||||||
|
|
||||||
if (!items.Any())
|
if (listItems.Count > items.Count) {
|
||||||
{
|
for (var i = items.Count; i < listItems.Count; i++) {
|
||||||
return;
|
listItems[i].Click -= ListItem_Click;
|
||||||
|
Control.RemoveChild (listItems[i]);
|
||||||
|
}
|
||||||
|
listItems.RemoveRange (items.Count, listItems.Count - items.Count);
|
||||||
|
}
|
||||||
|
if (listItems.Count < items.Count) {
|
||||||
|
for (var i = listItems.Count; i < items.Count; i++) {
|
||||||
|
var li = new ListItem ();
|
||||||
|
li.Style["list-style-type"] = "none";
|
||||||
|
li.Click += ListItem_Click;
|
||||||
|
Control.AppendChild (li);
|
||||||
|
listItems.Add (li);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool grouping = Element.IsGroupingEnabled;
|
bool grouping = Element.IsGroupingEnabled;
|
||||||
|
|
||||||
if (grouping)
|
if (grouping) {
|
||||||
|
// Not Implemented
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var i = 0;
|
||||||
|
foreach (var item in items) {
|
||||||
|
var li = listItems[i];
|
||||||
|
var children = li.Children;
|
||||||
|
var rv = children.Count > 0 ? children[0] as CellView : null;
|
||||||
|
var cell = GetCell (item, rv);
|
||||||
|
if (rv == null) {
|
||||||
|
li.AppendChild (cell);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListItem_Click (object sender, TargetEventArgs e)
|
||||||
{
|
{
|
||||||
|
if (Control == null)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var item in items)
|
|
||||||
{
|
|
||||||
var cell = GetCell(item);
|
|
||||||
|
|
||||||
var listItem = new ListItem();
|
|
||||||
listItem.Style["list-style-type"] = "none";
|
|
||||||
|
|
||||||
listItem.AppendChild(cell);
|
|
||||||
listItem.Click += ListItem_Click;
|
|
||||||
|
|
||||||
_cells.Add(listItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var cell in _cells)
|
|
||||||
{
|
|
||||||
_listView.AppendChild(cell);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ListItem_Click(object sender, TargetEventArgs e)
|
|
||||||
{
|
|
||||||
var it = (ListItem)sender;
|
var it = (ListItem)sender;
|
||||||
var ndx = _cells.IndexOf(it);
|
var ndx = Control.Children.IndexOf (it);
|
||||||
Element.NotifyRowTapped (ndx, null);
|
Element.NotifyRowTapped (ndx, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,19 +161,21 @@ namespace Ooui.Forms.Renderers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateBackgroundColor()
|
void UpdateBackgroundColor ()
|
||||||
{
|
{
|
||||||
var backgroundColor = Element.BackgroundColor.ToOouiColor();
|
if (Control == null)
|
||||||
|
return;
|
||||||
|
|
||||||
_listView.Style.BackgroundColor = backgroundColor;
|
var backgroundColor = Element.BackgroundColor.ToOouiColor (Xamarin.Forms.Color.White);
|
||||||
|
|
||||||
|
Control.Style.BackgroundColor = backgroundColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Div GetCell(Cell cell)
|
CellView GetCell (Cell cell, CellView reusableView)
|
||||||
{
|
{
|
||||||
var renderer =
|
var renderer = (Cells.CellRenderer)Registrar.Registered.GetHandlerForObject<IRegisterable> (cell);
|
||||||
(Cells.CellRenderer)Registrar.Registered.GetHandler<IRegisterable>(cell.GetType());
|
|
||||||
|
|
||||||
var realCell = renderer.GetCell(cell, null, _listView);
|
var realCell = renderer.GetCell (cell, reusableView, Control);
|
||||||
|
|
||||||
return realCell;
|
return realCell;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Ooui v1.0.0
|
// Ooui v1.0.0
|
||||||
|
|
||||||
var debug = false;
|
var debug = true;
|
||||||
|
|
||||||
const nodes = {};
|
const nodes = {};
|
||||||
const hasText = {};
|
const hasText = {};
|
||||||
|
|
Loading…
Reference in New Issue