File: togglebutton-renderer.c

package info (click to toggle)
entity 1.0.1-8
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 5,604 kB
  • ctags: 5,394
  • sloc: ansic: 64,242; sh: 7,377; makefile: 776; perl: 319
file content (122 lines) | stat: -rw-r--r-- 3,459 bytes parent folder | download | duplicates (3)
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
#include <gtk/gtk.h>
#include <stdlib.h>
#include "entity.h"
#include "gtk-common.h"
#include "gtk-widget-attr.h"
#include "toggle-renderer.h"

static void
rendgtk_toggle_button_onclick_callback (GtkWidget * widget, gpointer user_data)
{
    ENode *node = user_data;
    gchar *function = NULL;

    function = enode_attrib_str (node, "onclick", NULL);

    enode_call_ignore_return (node, function, "");
}

static void
rendgtk_toggle_button_onmouseenter_callback (GtkWidget * widget,
					     gpointer user_data)
{
    ENode *node = user_data;
    gchar *function = NULL;

    function = enode_attrib_str (node, "onmouseenter", NULL);

    enode_call_ignore_return (node, function, "");
}

static void
rendgtk_toggle_button_onmouseleave_callback (GtkWidget * widget,
					     gpointer user_data)
{
    ENode *node = user_data;
    gchar *function = NULL;

    function = enode_attrib_str (node, "onmouseleave", NULL);

    enode_call_ignore_return (node, function, "");
}


static void
rendgtk_toggle_button_render (ENode * node)
{
    GtkWidget *button;
    GtkWidget *vbox;

    EDEBUG (("button-renderer", "in rendgtk_button_render"));

    button = gtk_toggle_button_new ();

    vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (button), vbox);

    enode_set_kv (node, "top-widget", button);
    enode_set_kv (node, "bottom-widget", vbox);

    gtk_signal_connect (GTK_OBJECT (button), "clicked",
			rendgtk_toggle_button_onclick_callback, node);
    gtk_signal_connect (GTK_OBJECT (button), "enter",
			rendgtk_toggle_button_onmouseenter_callback, node);
    gtk_signal_connect (GTK_OBJECT (button), "leave",
			rendgtk_toggle_button_onmouseleave_callback, node);
    gtk_signal_connect (GTK_OBJECT (button), "toggled",
			GTK_SIGNAL_FUNC (rendgtk_toggle_ontoggle_callback),
			node);
    gtk_signal_connect (GTK_OBJECT (button), "toggled",
			GTK_SIGNAL_FUNC (rendgtk_toggle_onselect_callback),
			node);


    enode_attribs_sync (node);

    rendgtk_show_cond (node, button);
    gtk_widget_show (vbox);
}


void
toggle_button_renderer_register (void)
{
    Element *element;
    ElementAttr *e_attr;

    element = g_new0 (Element, 1);
    element->render_func = rendgtk_toggle_button_render;
    element->destroy_func = rendgtk_element_destroy;
    element->parent_func = rendgtk_box_pack;
    element->tag = "togglebutton";
    element->description = "Create a new toggle button widget.";
    element_register (element);

    e_attr = g_new0 (ElementAttr, 1);
    e_attr->attribute = "onclick";
    e_attr->description = "Sets up a handler for click events.";
    e_attr->value_desc = "function";
    e_attr->possible_values = "(calling_node)";
    element_register_attrib (element, e_attr);

    e_attr = g_new0 (ElementAttr, 1);
    e_attr->attribute = "onmouseenter";
    e_attr->description = "Sets up a handler for mouse enter events.";
    e_attr->value_desc = "function";
    e_attr->possible_values = "(calling_node)";
    element_register_attrib (element, e_attr);

    e_attr = g_new0 (ElementAttr, 1);
    e_attr->attribute = "onmouseleave";
    e_attr->description = "Sets up a handler for mouse leave events.";
    e_attr->value_desc = "function";
    e_attr->possible_values = "(calling_node)";
    element_register_attrib (element, e_attr);


    rendgtk_toggle_attr_register (element);
    rendgtk_widget_attr_register (element, GTK_TYPE_TOGGLE_BUTTON);
    rendgtk_containerbox_attr_register (element);
}