/* GOB C Preprocessor
* Copyright (C) 1999-2000 the Free Software Foundation.
- * Copyright (C) 2001 George Lebl
+ * Copyright (C) 2000 Eazel, Inc.
+ * Copyright (C) 2001-2004 George (Jiri) Lebl
*
* Author: George Lebl
*
static GList *flag_vals = NULL;
static GList *error_vals = NULL;
+static gboolean abstract = FALSE;
static char *chunk_size = NULL;
static char *bonobo_object_class = NULL;
+static int glade_xml = FALSE;
static GList *interfaces = NULL;
static GList *typestack = NULL;
static GList *funcargs = NULL;
static gboolean destructor_simple = TRUE;
static char *initializer = NULL;
static int initializer_line = 0;
+static int glade_widget = FALSE;
static char *onerror = NULL;
static char *defreturn = NULL;
extern int ccode_line;
extern int line_no;
+extern gboolean for_cpp;
extern char *yytext;
var = node_new (VARIABLE_NODE,
"scope", scope,
"vtype:steal", type,
+ "glade_widget", glade_widget,
"id:steal", name,
"line_no", line_no,
"destructor_unref", destructor_unref,
"destructor_simple", destructor_simple,
"initializer:steal", initializer,
"initializer_line", initializer_line,
+ "initializer_simple", TRUE,
NULL);
class_nodes = g_list_append(class_nodes, var);
+ glade_widget = FALSE;
}
static void
return ret;
}
+static void
+add_construct_glade (char * file, char * root, char * domain)
+{
+ Node *var;
+ Type * type;
+ GList * flags = NULL;
+
+ type = (Type *)node_new (TYPE_NODE,
+ "name", "GladeXML",
+ "pointer", "*",
+ NULL);
+ initializer = g_strdup_printf("\t{\n"
+ "\tGtkWidget * root;\n"
+ "\t%%1$s->_priv->_glade_xml = glade_xml_new(%s, %s, %s);\n"
+ "\troot = glade_xml_get_widget(%%1$s->_priv->_glade_xml, %s);\n"
+ "\tgtk_widget_show(root);\n"
+ "\tgtk_container_add(GTK_CONTAINER(%%1$s), root);\n"
+ "\tglade_xml_signal_autoconnect_full(%%1$s->_priv->_glade_xml, (GladeXMLConnectFunc)___glade_xml_connect_foreach, (gpointer)%%1$s);\n"
+ "}\n", file, root, domain ? domain : "NULL", root);
+
+ var = node_new (VARIABLE_NODE,
+ "scope", PRIVATE_SCOPE,
+ "vtype:steal", type,
+ "glade_widget", FALSE,
+ "id:steal", "_glade_xml",
+ "destructor_unref", FALSE,
+ "destructor", "g_object_unref",
+ "destructor_simple", TRUE,
+ "initializer", initializer,
+ "initializer_simple", FALSE,
+ NULL);
+ class_nodes = g_list_prepend(class_nodes, var);
+}
+
static void
property_link_and_export (Node *node)
{
get_func = g_strdup_printf ("g_value_get_%s", prop->gtktype);
g_strdown (get_func);
- if (strcmp (prop->gtktype, "FLAGS") == 0) {
- setcast = "(guint) ";
- getcast = to_free =
- get_prop_enum_flag_cast (prop);
- } else if (strcmp (prop->gtktype, "ENUM") == 0) {
- setcast = "(gint) ";
- getcast = to_free =
- get_prop_enum_flag_cast (prop);
+ if (for_cpp) {
+ if (strcmp (prop->gtktype, "FLAGS") == 0) {
+ setcast = "(guint) ";
+ getcast = to_free =
+ get_prop_enum_flag_cast (prop);
+ } else if (strcmp (prop->gtktype, "ENUM") == 0) {
+ setcast = "(gint) ";
+ getcast = to_free =
+ get_prop_enum_flag_cast (prop);
+ } else if (strcmp (prop->gtktype, "POINTER") == 0) {
+ setcast = "(gpointer) ";
+ getcast = g_strdup_printf ("(%s%s) ",
+ prop->ptype->name,
+ prop->ptype->pointer ? prop->ptype->pointer : "");
+ }
}
set = g_strdup_printf("%s->%s = %s%s (VAL);",
"otype:steal", $<id>2,
"ptype:steal", $<id>4,
"bonobo_object_class:steal", bonobo_object_class,
+ "glade_xml", glade_xml,
"interfaces:steal", interfaces,
"chunk_size:steal", chunk_size,
+ "abstract", abstract,
NULL);
bonobo_object_class = NULL;
+ glade_xml = FALSE;
chunk_size = NULL;
interfaces = NULL;
}
;
classflags:
+ | '(' TOKEN ')' classflags {
+ if(strcmp($<id>2,"abstract") == 0) {
+ abstract = TRUE;
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
| '(' TOKEN TOKEN ')' classflags {
if(strcmp($<id>2,"chunks") == 0) {
g_free (chunk_size);
YYERROR;
}
}
+ | '(' TOKEN STRING STRING ')' classflags {
+ if (strcmp ($<id>2, "GladeXML") == 0) {
+ glade_xml = TRUE;
+ add_construct_glade($<id>3, $<id>4, NULL);
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ | '(' TOKEN STRING STRING STRING ')' classflags {
+ if (strcmp ($<id>2, "GladeXML") == 0) {
+ glade_xml = TRUE;
+ add_construct_glade($<id>3, $<id>4, $<id>5);
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ | '(' TOKEN TOKEN STRING ')' classflags {
+ if (strcmp ($<id>2, "GladeXML") == 0) {
+ glade_xml = TRUE;
+ add_construct_glade($<id>3, $<id>4, NULL);
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ | '(' TOKEN TOKEN STRING STRING ')' classflags {
+ if (strcmp ($<id>2, "GladeXML") == 0) {
+ glade_xml = TRUE;
+ add_construct_glade($<id>3, $<id>4, $<id>5);
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
;
classcode: classcode thing { ; }
| initializer destructor { ; }
| initializer { destructor = NULL; }
| destructor { initializer = NULL; }
+ | TOKEN {
+ if (strcmp ($<id>1, "GladeXML") == 0) {
+ glade_widget = TRUE;
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
| {
destructor = NULL;
initializer = NULL;
}
| TOKEN {
ensure_property ();
- if (strcmp ($<id>1, "link") == 0) {
+ if (strcmp ($<id>1, "override") == 0) {
+ g_free($<id>1);
+ node_set ((Node *)property,
+ "override", TRUE,
+ NULL);
+ } else if (strcmp ($<id>1, "link") == 0) {
g_free($<id>1);
node_set ((Node *)property,
"link", TRUE,