4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 // Copyright (c) 2006 Daniel Nauck
26 // Daniel Nauck (dna(at)mono-project(dot)de)
32 using System.Runtime.Serialization;
33 using System.ComponentModel;
35 namespace System.Windows.Forms
37 [SerializableAttribute]
39 [DesignTimeVisible(false)]
40 [DefaultProperty("Header")]
41 public sealed class ListViewGroup : ISerializable
43 private string header = string.Empty;
44 private string name = null;
45 private HorizontalAlignment header_alignment = HorizontalAlignment.Left;
46 private ListView list_view_owner = null;
47 private ListView.ListViewItemCollection items = null;
48 private object tag = null;
50 #region ListViewGroup constructors
52 public ListViewGroup()
54 header = "ListViewGroup";
55 header_alignment = HorizontalAlignment.Left;
58 public ListViewGroup(string header)
61 header_alignment = HorizontalAlignment.Left;
64 public ListViewGroup(string key, string headerText)
68 header_alignment = HorizontalAlignment.Left;
71 public ListViewGroup(string header, HorizontalAlignment headerAlignment)
74 header_alignment = headerAlignment;
77 private ListViewGroup(SerializationInfo info, StreamingContext context)
79 header = info.GetString("Header");
80 name = info.GetString("Name");
81 header_alignment = (HorizontalAlignment)info.GetInt32("HeaderAlignment");
82 tag = info.GetValue("Tag", typeof(object));
84 int count = info.GetInt32("ListViewItemCount");
87 items = new ListView.ListViewItemCollection(list_view_owner);
89 for (int i = 0; i < count; i++)
91 items.Add((ListViewItem)info.GetValue(string.Format("ListViewItem_{0}", i), typeof(ListViewItem)));
98 #region ListViewGroup properties
100 public string Header {
101 get { return header; }
103 if (!header.Equals(value)) {
106 if (list_view_owner != null)
107 list_view_owner.Redraw(true);
112 [DefaultValue (HorizontalAlignment.Left)]
113 public HorizontalAlignment HeaderAlignment {
114 get { return header_alignment; }
116 if (!header_alignment.Equals(value)) {
117 if (value != HorizontalAlignment.Left && value != HorizontalAlignment.Right &&
118 value != HorizontalAlignment.Center)
119 throw new InvalidEnumArgumentException("HeaderAlignment", (int)value, typeof(HorizontalAlignment));
121 header_alignment = value;
123 if (list_view_owner != null)
124 list_view_owner.Redraw(true);
130 public ListView.ListViewItemCollection Items {
133 items = new ListView.ListViewItemCollection(list_view_owner);
139 [DesignerSerializationVisibility(0)]
141 public ListView ListView {
142 get { return list_view_owner; }
145 internal ListView ListViewOwner {
146 get { return list_view_owner; }
147 set { list_view_owner = value; }
154 set { name = value; }
157 [TypeConverter(typeof(StringConverter))]
168 public override string ToString()
173 #region ISerializable Members
175 public void GetObjectData(SerializationInfo info, StreamingContext context)
177 info.AddValue("Header", header);
178 info.AddValue("Name", name);
179 info.AddValue("HeaderAlignment", header_alignment);
180 info.AddValue("Tag", tag);
182 info.AddValue("ListViewItemCount", items.Count);
185 foreach (ListViewItem item in items)
187 info.AddValue(string.Format("ListViewItem_{0}", i), item);