summaryrefslogtreecommitdiffstats
path: root/qtsharp/src/bindings/static/QtSignalMap.cs
blob: 38ab5ac3548501edc9ded83daec58c2a20b417de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// QtSignalMap.cs - Hashtable wrapper for prettier code.
//
// Copyright (C) 2002  Nick Zigarovich (nick@chemlab.org)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
//
// NOTES
// o By inheriting from QObject, we can use the child tracking features to
//   ensure that instances of signal maps are deleted by their parents when
//   the parent Dispose()es.
//
// FIXME
// o Override Dispose() and make sure everything gets cleaned up on deletion.

namespace Qt {
	using System;
	using System.Collections;
	using Qt;

	internal class QtSignalMap: QtSupport {
		private Hashtable signalMap;
		private string name;

		public string Name {
			get { return name; }
		}

		public QtSignalMap (QObject parent): this (parent, "QtSignalMap") {}

		public QtSignalMap (QObject parent, string name): base (QNull.Instance)
		{
			this.name = name;
			signalMap = new Hashtable ();
		}

		internal override void Delete () {}

		public void Add (QtSignal signal)
		{
			signalMap[signal.Identifier] = signal;
		}

		public QtSignal Remove (string name)
		{
			QtSignal ret = signalMap[name] as QtSignal;
			signalMap.Remove (name);
			return ret;
		}

		public bool Contains (string name)
		{
			return signalMap.ContainsKey (name);
		}

		public QtSignal this[string idx] {
			get {
				if (signalMap.ContainsKey (idx))
					return signalMap[idx] as QtSignal;
				else
					return null;
			}

			set { signalMap[idx] = value; }
		}

		public IDictionaryEnumerator GetEnumerator ()
		{
			return signalMap.GetEnumerator ();
		}

		public void DumpMap()
		{
			if (signalMap.Count == 0) {
				ErrMsg ("** {0}: No signals to dump.", name);
				ErrMsg ("");
			}
			else {
				IDictionaryEnumerator ide = signalMap.GetEnumerator();

				while (ide.MoveNext ()) {
					(ide.Value as QtSignal).DumpConnections ();
					ErrMsg ("");
				}
			}
		}
	}
}