5
// Eric Maupin <ermau@xamarin.com>
7
// Copyright (c) 2012 Xamarin, Inc.
9
// Permission is hereby granted, free of charge, to any person obtaining a copy
10
// of this software and associated documentation files (the "Software"), to deal
11
// in the Software without restriction, including without limitation the rights
12
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
// copies of the Software, and to permit persons to whom the Software is
14
// furnished to do so, subject to the following conditions:
16
// The above copyright notice and this permission notice shall be included in
17
// all copies or substantial portions of the Software.
19
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28
using System.Collections.Generic;
31
using System.Windows.Controls;
33
using Xwt.WPFBackend.Utilities;
34
using SWC = System.Windows.Controls;
37
namespace Xwt.WPFBackend
39
public class ListViewBackend
40
: WidgetBackend, IListViewBackend
42
public ListViewBackend()
44
ListView = new ExListView();
45
ListView.View = this.view;
48
public ScrollPolicy VerticalScrollPolicy {
49
get { return ScrollViewer.GetVerticalScrollBarVisibility (this.ListView).ToXwtScrollPolicy (); }
50
set { ScrollViewer.SetVerticalScrollBarVisibility (ListView, value.ToWpfScrollBarVisibility ()); }
53
public ScrollPolicy HorizontalScrollPolicy {
54
get { return ScrollViewer.GetHorizontalScrollBarVisibility (this.ListView).ToXwtScrollPolicy (); }
55
set { ScrollViewer.SetHorizontalScrollBarVisibility (ListView, value.ToWpfScrollBarVisibility ()); }
58
private bool borderVisible = true;
59
public bool BorderVisible
61
get { return this.borderVisible; }
64
if (this.borderVisible == value)
68
ListView.ClearValue (Control.BorderBrushProperty);
70
ListView.BorderBrush = null;
72
this.borderVisible = value;
76
public bool HeadersVisible {
77
get { return this.headersVisible; }
79
this.headersVisible = value;
81
if (this.view.ColumnHeaderContainerStyle != null)
82
this.view.ColumnHeaderContainerStyle.Setters.Remove (HideHeadersSetter);
84
if (this.view.ColumnHeaderContainerStyle == null)
85
this.view.ColumnHeaderContainerStyle = new Style();
87
this.view.ColumnHeaderContainerStyle.Setters.Add (HideHeadersSetter);
92
public int[] SelectedRows {
93
get { return ListView.SelectedItems.Cast<object>().Select (ListView.Items.IndexOf).ToArray (); }
96
public object AddColumn (ListViewColumn col)
98
var column = new GridViewColumn ();
99
column.CellTemplate = new DataTemplate { VisualTree = CellUtil.CreateBoundColumnTemplate (col.Views) };
100
if (col.HeaderView != null)
101
column.HeaderTemplate = new DataTemplate { VisualTree = CellUtil.CreateBoundCellRenderer (col.HeaderView) };
103
column.Header = col.Title;
105
this.view.Columns.Add (column);
110
public void RemoveColumn (ListViewColumn col, object handle)
112
this.view.Columns.Remove ((GridViewColumn) handle);
115
public void UpdateColumn (ListViewColumn col, object handle, ListViewColumnChange change)
117
var column = (GridViewColumn) handle;
118
column.CellTemplate = new DataTemplate { VisualTree = CellUtil.CreateBoundColumnTemplate (col.Views) };
119
if (col.HeaderView != null)
120
column.HeaderTemplate = new DataTemplate { VisualTree = CellUtil.CreateBoundCellRenderer (col.HeaderView) };
122
column.Header = col.Title;
125
public void SetSelectionMode (SelectionMode mode)
128
case SelectionMode.Single:
129
ListView.SelectionMode = SWC.SelectionMode.Single;
132
case SelectionMode.Multiple:
133
ListView.SelectionMode = SWC.SelectionMode.Extended;
138
public void SelectAll ()
140
ListView.SelectAll();
143
public void UnselectAll ()
145
ListView.UnselectAll();
148
public void SetSource (IListDataSource source, IBackend sourceBackend)
150
var dataSource = sourceBackend as ListDataSource;
151
if (dataSource != null)
152
ListView.ItemsSource = dataSource;
154
ListView.ItemsSource = new ListSourceNotifyWrapper (source);
157
public void SelectRow (int pos)
159
object item = ListView.Items [pos];
160
if (ListView.SelectionMode == System.Windows.Controls.SelectionMode.Single)
161
ListView.SelectedItem = item;
163
ListView.SelectedItems.Add (item);
166
public void UnselectRow (int pos)
168
object item = ListView.Items [pos];
169
if (ListView.SelectionMode == System.Windows.Controls.SelectionMode.Extended)
170
ListView.SelectedItems.Remove (item);
171
else if (ListView.SelectedItem == item)
172
ListView.SelectedItem = null;
175
public override void EnableEvent(object eventId)
177
base.EnableEvent (eventId);
178
if (eventId is TableViewEvent) {
179
switch ((TableViewEvent)eventId) {
180
case TableViewEvent.SelectionChanged:
181
ListView.SelectionChanged += OnSelectionChanged;
187
public override void DisableEvent (object eventId)
189
base.DisableEvent (eventId);
190
if (eventId is TableViewEvent) {
191
switch ((TableViewEvent)eventId) {
192
case TableViewEvent.SelectionChanged:
193
ListView.SelectionChanged -= OnSelectionChanged;
199
private void OnSelectionChanged (object sender, SelectionChangedEventArgs e)
201
Toolkit.Invoke (ListViewEventSink.OnSelectionChanged);
204
private bool headersVisible;
205
private readonly GridView view = new GridView();
207
protected ExListView ListView {
208
get { return (ExListView) Widget; }
209
set { Widget = value; }
212
protected IListViewEventSink ListViewEventSink {
213
get { return (IListViewEventSink) EventSink; }
216
private static readonly Setter HideHeadersSetter = new Setter (UIElement.VisibilityProperty, Visibility.Collapsed);