3 static extern int g_mime_multipart_get_count (IntPtr multipart);
6 static extern void g_mime_multipart_clear (IntPtr multipart);
9 static extern int g_mime_multipart_add (IntPtr multipart, IntPtr part);
12 static extern void g_mime_multipart_insert (IntPtr multipart, int index, IntPtr part);
15 static extern bool g_mime_multipart_remove (IntPtr multipart, IntPtr part);
18 static extern bool g_mime_multipart_remove_at (IntPtr multipart, int index);
21 static extern bool g_mime_multipart_contains (IntPtr multipart, IntPtr part);
24 static extern int g_mime_multipart_index_of (IntPtr multipart, IntPtr part);
27 static extern IntPtr g_mime_multipart_get_part (IntPtr multipart, int index);
30 Exception CannotAdd (object value)
33 return new ArgumentNullException ("value");
35 string message = String.Format ("Cannot add objects of type '{0}' to a GMime.Multipart.",
36 value.GetType ().ToString ());
38 return new InvalidOperationException (message);
41 Exception CannotInsert (object value)
44 return new ArgumentNullException ("value");
46 string message = String.Format ("Cannot insert objects of type '{0}' into a GMime.Multipart.",
47 value.GetType ().ToString ());
49 return new InvalidOperationException (message);
52 Exception CannotRemove (object value)
55 return new ArgumentNullException ("value");
57 string message = String.Format ("Cannot remove objects of type '{0}' from a GMime.Multipart.",
58 value.GetType ().ToString ());
60 return new InvalidOperationException (message);
63 Exception CannotSet (object value)
66 return new ArgumentNullException ("value");
68 string message = String.Format ("Cannot set objects of type '{0}' on a GMime.Multipart.",
69 value.GetType ().ToString ());
71 return new InvalidOperationException (message);
75 get { return g_mime_multipart_get_count (Handle); }
78 public bool IsFixedSize {
82 public bool IsReadOnly {
86 public bool IsSynchronized {
90 public object SyncRoot {
94 public int Add (GMime.Entity part)
97 throw CannotAdd (part);
99 return g_mime_multipart_add (Handle, part.Handle);
102 int IList.Add (object value)
104 GMime.Entity part = value as GMime.Entity;
107 throw CannotAdd (value);
114 g_mime_multipart_clear (Handle);
117 public bool Contains (GMime.Entity part)
122 return g_mime_multipart_contains (Handle, part.Handle);
125 bool IList.Contains (object value)
127 return Contains (value as GMime.Entity);
130 public void CopyTo (Array array, int index)
133 throw new ArgumentNullException ("array");
136 throw new ArgumentOutOfRangeException ("index");
140 for (int i = 0; i < n; i++)
141 array.SetValue (((IList) this)[i], index + i);
144 public IEnumerator GetEnumerator ()
148 for (int i = 0; i < n; i++)
149 yield return this[i];
154 public int IndexOf (GMime.Entity part)
159 return g_mime_multipart_index_of (Handle, part.Handle);
162 int IList.IndexOf (object value)
164 return IndexOf (value as GMime.Entity);
167 public void Insert (int index, GMime.Entity part)
170 throw CannotInsert (part);
173 throw new ArgumentOutOfRangeException ("index");
175 g_mime_multipart_insert (Handle, index, part.Handle);
178 void IList.Insert (int index, object value)
180 GMime.Entity part = value as GMime.Entity;
183 throw CannotInsert (value);
185 Insert (index, part);
188 public void Remove (GMime.Entity part)
191 throw CannotRemove (part);
193 g_mime_multipart_remove (Handle, part.Handle);
196 void IList.Remove (object value)
198 GMime.Entity part = value as GMime.Entity;
201 throw CannotRemove (value);
206 public void RemoveAt (int index)
208 if (index < 0 || index >= Count)
209 throw new ArgumentOutOfRangeException ("index");
211 g_mime_multipart_remove_at (Handle, index);
214 public GMime.Entity this[int index] {
216 IntPtr raw = g_mime_multipart_get_part (Handle, index);
218 if (raw == IntPtr.Zero)
221 return GLib.Object.GetObject (raw) as GMime.Entity;
226 throw CannotSet (value);
228 if (index > Count || index < Count)
229 throw new ArgumentOutOfRangeException ("index");
233 Insert (index, value);
240 object IList.this[int index] {
246 this[index] = value as GMime.Entity;