File: sdpgtkevents.cpp.awk

package info (click to toggle)
k3d 0.4.3.0-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 51,716 kB
  • ctags: 81,610
  • sloc: cpp: 283,698; ansic: 64,095; xml: 61,533; sh: 9,026; makefile: 5,282; python: 431; perl: 308; awk: 130
file content (72 lines) | stat: -rw-r--r-- 2,001 bytes parent folder | download
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
BEGIN {
		print "// Automatically-generated SDPGTK wrappers for Gtk+ events"
		print "//"
		print "// This file was generated with 'awk -f sdpgtkevents.cpp.awk sdpgtkevents.data > source/sdpgtkevents.cpp'"
		print "// Do not edit this file by hand!  Alter sdpgtkevents.cpp.awk or sdpgtkevents.data!"
		print ""
		print ""

		print "#include \"sdpgtkevents.h\""
		print ""

		FS = " "
}




# Create class ...

{
	class = $1
	signal = $2
	result = $3
	firstarg = 4

	print "///////////////////////////////////////////////////////////////////////////////"
	print "// " class " ('" signal "')"
	print ""

# Class constructor ...

	print class "::" class "(SDPCSTRING EventSignal, SDPCSTRING EventName, bool After, sdpGtkObjectContainer* EventContainer, GtkObject* EventObject) : sdpGtkObjectEvent(EventSignal, EventName, After, EventContainer, EventObject) {}"

# Connect() pure-virtual override ...

	print "void " class "::Connect() { m_EventHandler = m_After ? gtk_signal_connect_after(m_EventObject, m_EventSignal, GtkSignalFunc(RawEvent), gpointer(this)) : gtk_signal_connect(m_EventObject, m_EventSignal, GtkSignalFunc(RawEvent), gpointer(this)); }"

# Event arguments ...

	fullargs = ""
	setargs = ""
	args = ""

	for(i = firstarg; i < NF; i+=2)
		{
			if(i > firstarg)
				{
					fullargs = fullargs ", "
					args = args ", "
				}

			fullargs = fullargs $i " " $(i+1)
			setargs = setargs "m_" $(i+1) " = " $(i+1) "; "
			args = args $(i+1)
		}

# Event and raw-event handlers ...

	if(result == "void")
		{
			print "void " class "::Event(" fullargs ") { " setargs "m_EventContainer->OnEvent(this); }"
			print "void " class "::RawEvent(" fullargs ", gpointer EventData) { ((" class "*)EventData)->Event(" args "); }"
		}
	else
		{
			print result " "class "::Event(" fullargs ") { " setargs "m_EventContainer->OnEvent(this); return m_Result; }"
			print result " "class "::RawEvent(" fullargs ", gpointer EventData) { return ((" class "*)EventData)->Event(" args "); }"
		}
		
	print ""
}