summaryrefslogtreecommitdiff
path: root/src/events/ui_event.c
blob: 4fac3b68cf2cf7eb3f2e7ad8ccfc234704f4c1e6 (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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * This file is part of libdom.
 * Licensed under the MIT License,
 *                http://www.opensource.org/licenses/mit-license.php
 * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com>
 */

#include <stdlib.h>

#include "events/ui_event.h"

static void _virtual_dom_ui_event_destroy(struct dom_event *evt);

static struct dom_event_private_vtable _event_vtable = {
	_virtual_dom_ui_event_destroy
};

/* Constructor */
dom_exception _dom_ui_event_create(struct dom_ui_event **evt)
{
	*evt = malloc(sizeof(dom_ui_event));
	if (*evt == NULL) 
		return DOM_NO_MEM_ERR;
	
	((struct dom_event *) *evt)->vtable = &_event_vtable;

	return _dom_ui_event_initialise(*evt);
}

/* Destructor */
void _dom_ui_event_destroy(struct dom_ui_event *evt)
{
	_dom_ui_event_finalise(evt);

	free(evt);
}

/* Initialise function */
dom_exception _dom_ui_event_initialise(struct dom_ui_event *evt)
{
	evt->view = NULL;
	return _dom_event_initialise(&evt->base);
}

/* Finalise function */
void _dom_ui_event_finalise(struct dom_ui_event *evt)
{
	evt->view = NULL;
	_dom_event_finalise(&evt->base);
}

/* The virtual destroy function */
void _virtual_dom_ui_event_destroy(struct dom_event *evt)
{
	_dom_ui_event_destroy((dom_ui_event *) evt);
}

/*----------------------------------------------------------------------*/
/* The public API */

/**
 * Get the AbstractView inside this event
 *
 * \param evt   The Event object
 * \param view  The returned AbstractView
 * \return DOM_NO_ERR.
 */
dom_exception _dom_ui_event_get_view(dom_ui_event *evt, 
		struct dom_abstract_view **view)
{
	*view = evt->view;

	return DOM_NO_ERR;
}

/**
 * Get the detail param of this event
 *
 * \param evt     The Event object
 * \param detail  The detail object
 * \return DOM_NO_ERR.
 */
dom_exception _dom_ui_event_get_detail(dom_ui_event *evt,
		int32_t *detail)
{
	*detail = evt->detail;

	return DOM_NO_ERR;
}

/**
 * Initialise the UIEvent
 *
 * \param evt         The Event object
 * \param type        The type of this UIEvent
 * \param bubble      Whether this event can bubble
 * \param cancelable  Whether this event is cancelable
 * \param view        The AbstractView of this UIEvent
 * \param detail      The detail object
 * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
 */
dom_exception _dom_ui_event_init(dom_ui_event *evt, dom_string *type, 
		bool bubble, bool cancelable, struct dom_abstract_view *view,
		int32_t detail)
{
	evt->view = view;
	evt->detail = detail;

	return _dom_event_init(&evt->base, type, bubble, cancelable);
}

/**
 * Initialise the UIEvent with namespace
 *
 * \param evt         The Event object
 * \param namespace   The namespace of this Event
 * \param type        The type of this UIEvent
 * \param bubble      Whether this event can bubble
 * \param cancelable  Whether this event is cancelable
 * \param view        The AbstractView of this UIEvent
 * \param detail      The detail object
 * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
 */
dom_exception _dom_ui_event_init_ns(dom_ui_event *evt, 
		dom_string *namespace, dom_string *type,
		bool bubble, bool cancelable, struct dom_abstract_view *view,
		int32_t detail)
{
	evt->view = view;
	evt->detail = detail;

	return _dom_event_init_ns(&evt->base, namespace, type, bubble,
			cancelable);
}