5
// Gabriel Burt <gburt@novell.com>
6
// Aaron Bockover <abockover@novell.com>
8
// Copyright (C) 2007-2008 Novell, Inc.
10
// Permission is hereby granted, free of charge, to any person obtaining
11
// a copy of this software and associated documentation files (the
12
// "Software"), to deal in the Software without restriction, including
13
// without limitation the rights to use, copy, modify, merge, publish,
14
// distribute, sublicense, and/or sell copies of the Software, and to
15
// permit persons to whom the Software is furnished to do so, subject to
16
// the following conditions:
18
// The above copyright notice and this permission notice shall be
19
// included in all copies or substantial portions of the Software.
21
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32
using Hyena.Collections;
36
public abstract class BaseListModel<T> : IListModel<T>
38
private Selection selection;
40
public event EventHandler Cleared;
41
public event EventHandler Reloaded;
43
public BaseListModel () : base ()
47
protected virtual void OnCleared ()
49
Selection.MaxIndex = Count - 1;
51
EventHandler handler = Cleared;
53
handler(this, EventArgs.Empty);
57
protected virtual void OnReloaded ()
59
Selection.MaxIndex = Count - 1;
61
EventHandler handler = Reloaded;
63
handler(this, EventArgs.Empty);
67
public void RaiseReloaded ()
72
public abstract void Clear();
74
public abstract void Reload();
76
public abstract T this[int index] { get; }
78
public abstract int Count { get; }
80
public virtual object GetItem (int index)
85
public virtual Selection Selection {
86
get { return selection; }
87
protected set { selection = value; }
90
protected ModelSelection<T> model_selection;
91
public virtual ModelSelection<T> SelectedItems {
93
return model_selection ?? (model_selection = new ModelSelection<T> (this, Selection));
97
public T FocusedItem {
98
get { return Selection.FocusedIndex == -1 ? default(T) : this[Selection.FocusedIndex]; }
101
private bool can_reorder = false;
102
public bool CanReorder {
103
get { return can_reorder; }
104
set { can_reorder = value; }