glade3 r1767 - in trunk: . gladeui
- From: tvb svn gnome org
- To: svn-commits-list gnome org
- Subject: glade3 r1767 - in trunk: . gladeui
- Date: Fri, 4 Apr 2008 20:13:28 +0100 (BST)
Author: tvb
Date: Fri Apr 4 20:13:27 2008
New Revision: 1767
URL: http://svn.gnome.org/viewvc/glade3?rev=1767&view=rev
Log:
* gladeui/glade-project.c: Resurected <requires> code and
saving the generic comment again, still need to load the
comment.
Modified:
trunk/ChangeLog
trunk/gladeui/glade-project.c
trunk/gladeui/glade-xml-utils.c
trunk/gladeui/glade-xml-utils.h
Modified: trunk/gladeui/glade-project.c
==============================================================================
--- trunk/gladeui/glade-project.c (original)
+++ trunk/gladeui/glade-project.c Fri Apr 4 20:13:27 2008
@@ -130,10 +130,6 @@
static GladeIDAllocator *unsaved_number_allocator = NULL;
-/* XXX static gboolean glade_project_load_from_interface (GladeProject *project, */
-/* GladeInterface *interface, */
-/* const gchar *path); */
-
G_DEFINE_TYPE (GladeProject, glade_project, G_TYPE_OBJECT)
@@ -808,6 +804,48 @@
}
}
+static gboolean
+loadable_interface (GladeXmlNode *root_node, const gchar *path)
+{
+
+ GString *string = g_string_new (NULL);
+ GladeXmlNode *node;
+ gchar *required_lib;
+ gboolean loadable = TRUE;
+
+ for (node = glade_xml_node_get_children (root_node);
+ node; node = glade_xml_node_next (node))
+ {
+ /* Skip "requires" tags */
+ if (!glade_xml_node_verify_silent (node, GLADE_XML_TAG_REQUIRES))
+ continue;
+
+ if ((required_lib =
+ glade_xml_get_property_string_required (node, GLADE_XML_TAG_LIB,
+ NULL)) != NULL)
+ {
+ if (!glade_catalog_is_loaded (required_lib))
+ {
+ if (!loadable)
+ g_string_append (string, ", ");
+
+ g_string_append (string, required_lib);
+ loadable = FALSE;
+ }
+
+ }
+ }
+
+ if (!loadable)
+ glade_util_ui_message (glade_app_get_window(),
+ GLADE_UI_ERROR,
+ _("Failed to load %s.\n"
+ "The following required catalogs are unavailable: %s"),
+ path, string->str);
+ g_string_free (string, TRUE);
+ return loadable;
+}
+
gboolean
glade_project_load_from_file (GladeProject *project, const gchar *path)
{
@@ -817,12 +855,11 @@
GladeXmlNode *node;
GladeWidget *widget;
- project->priv->path = glade_util_canonical_path (path);
-
project->priv->selection = NULL;
project->priv->objects = NULL;
project->priv->loading = TRUE;
+ project->priv->path = glade_util_canonical_path (path);
/* get the context & root node of the catalog file */
if (!(context =
@@ -837,6 +874,14 @@
doc = glade_xml_context_get_doc (context);
root = glade_xml_doc_get_root (doc);
+ /* XXX Need to load project->priv->comment ! */
+
+ if (loadable_interface (root, path) == FALSE)
+ {
+ glade_xml_context_free (context);
+ return FALSE;
+ }
+
if (!glade_xml_node_verify (root, GLADE_XML_TAG_PROJECT))
{
g_warning ("Glade file root node is not '%s', skipping %s",
@@ -848,6 +893,10 @@
for (node = glade_xml_node_get_children (root);
node; node = glade_xml_node_next (node))
{
+ /* Skip "requires" tags */
+ if (!glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET))
+ continue;
+
if ((widget = glade_widget_read (project, NULL, node, NULL)) != NULL)
glade_project_add_object (project, NULL, widget->object);
}
@@ -855,6 +904,8 @@
if (glade_util_file_is_writeable (project->priv->path) == FALSE)
glade_project_set_readonly (project, TRUE);
+ /* Finished with the xml context */
+ glade_xml_context_free (context);
project->priv->mtime = glade_util_get_file_mtime (project->priv->path, NULL);
@@ -874,38 +925,6 @@
return TRUE;
-#if LOADING_WAS_IMPLEMENTED
-
- GladeInterface *interface;
-
- g_return_val_if_fail (GLADE_IS_PROJECT (project), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
-
- interface = glade_parser_interface_new_from_file (path, NULL);
-
- if (interface != NULL)
- {
- if (!glade_project_load_from_interface (project, interface, path))
- {
- glade_parser_interface_destroy (interface);
- return FALSE;
- }
- glade_parser_interface_destroy (interface);
- }
- else
- {
- return FALSE;
- }
-
- if (glade_util_file_is_writeable (project->priv->path) == FALSE)
- glade_project_set_readonly (project, TRUE);
-
- project->priv->modified = FALSE;
-
- project->priv->mtime = glade_util_get_file_mtime (project->priv->path, NULL);
-
-#endif // LOADING_WAS_IMPLEMENTED
-
}
@@ -1634,66 +1653,35 @@
{
GladeXmlContext *context;
GladeXmlDoc *doc;
- GladeXmlNode *root;
- GList *list;
+ GladeXmlNode *root, *req_node, *comment_node;
+ GList *required, *list;
doc = glade_xml_doc_new ();
context = glade_xml_context_new (doc, NULL);
root = glade_xml_node_new (context, GLADE_XML_TAG_PROJECT);
glade_xml_doc_set_root (doc, root);
-
- for (list = project->priv->objects; list; list = list->next)
- {
- GladeWidget *widget;
-
- widget = glade_widget_get_from_gobject (list->data);
-
- /*
- * Append toplevel widgets. Each widget then takes
- * care of appending its children.
- */
- if (widget->parent == NULL)
- glade_widget_write (widget, context, root);
- }
-
- return context;
-}
-#if LOADING_WAS_IMPLEMENTED
-
-/**
- * glade_project_write:
- * @project: a #GladeProject
- *
- * Returns: a libglade's GladeInterface representation of the
- * project and its contents
- */
-static GladeInterface *
-glade_project_write (GladeProject *project)
-{
- GladeInterface *interface;
- GList *required, *list, *tops = NULL;
- gchar **strv = NULL;
- guint i;
-
- interface = glade_parser_interface_new ();
+ glade_project_update_comment (project);
+ comment_node = glade_xml_node_new_comment (context, project->priv->comment);
+ glade_xml_node_append_child (root, comment_node);
if ((required = glade_project_required_libs (project)) != NULL)
{
- strv = g_malloc0 (g_list_length (required) * sizeof (char *));
- for (i = 0, list = required; list; i++, list = list->next)
- strv[i] = list->data; /* list->data is allocated for us */
-
- interface->n_requires = g_list_length (required);
- interface->requires = strv;
-
+ for (list = required; list; list = list->next)
+ {
+ req_node = glade_xml_node_new (context, GLADE_XML_TAG_REQUIRES);
+ glade_xml_node_append_child (root, req_node);
+ glade_xml_node_set_property_string (req_node,
+ GLADE_XML_TAG_LIB,
+ (gchar *)list->data);
+ }
+ g_list_foreach (required, (GFunc)g_free, NULL);
g_list_free (required);
}
- for (i = 0, list = project->priv->objects; list; list = list->next)
+ for (list = project->priv->objects; list; list = list->next)
{
GladeWidget *widget;
- GladeWidgetInfo *info;
widget = glade_widget_get_from_gobject (list->data);
@@ -1702,117 +1690,12 @@
* care of appending its children.
*/
if (widget->parent == NULL)
- {
- info = glade_widget_write (widget, interface);
- if (!info)
- return NULL;
-
- tops = g_list_prepend (tops, info);
- ++i;
- }
- }
- interface->n_toplevels = i;
- interface->toplevels = (GladeWidgetInfo **) g_new (GladeWidgetInfo *, i);
- for (i = 0, list = tops; list; list = list->next, ++i)
- interface->toplevels[i] = list->data;
-
- g_list_free (tops);
-
- glade_project_update_comment (project);
- interface->comment = g_strdup (project->priv->comment);
-
- return interface;
-}
-
-static gboolean
-loadable_interface (GladeInterface *interface, const gchar *path)
-{
- GString *string = g_string_new (NULL);
- gboolean loadable = TRUE;
- guint i;
-
- /* Check for required plugins here
- */
- for (i = 0; i < interface->n_requires; i++)
- if (!glade_catalog_is_loaded (interface->requires[i]))
- {
- g_string_append (string, interface->requires[i]);
- loadable = FALSE;
- }
-
- if (loadable == FALSE)
- glade_util_ui_message (glade_app_get_window(),
- GLADE_UI_ERROR,
- _("Failed to load %s.\n"
- "The following required catalogs are unavailable: %s"),
- path, string->str);
- g_string_free (string, TRUE);
- return loadable;
-}
-
-#endif // LOADING_WAS_IMPLEMENTED
-
-
-#if LOADING_WAS_IMPLEMENTED
-
-static gboolean
-glade_project_load_from_interface (GladeProject *project,
- GladeInterface *interface,
- const gchar *path)
-{
- GladeWidget *widget;
- guint i;
-
- g_return_val_if_fail (project != NULL, FALSE);
- g_return_val_if_fail (interface != NULL, FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
-
- if (loadable_interface (interface, path) == FALSE)
- return FALSE;
-
- project->priv->path = glade_util_canonical_path (path);
-
- project->priv->selection = NULL;
- project->priv->objects = NULL;
- project->priv->loading = TRUE;
-
- /* keep a comment */
- if (interface->comment)
- project->priv->comment = g_strdup (interface->comment);
-
- for (i = 0; i < interface->n_toplevels; ++i)
- {
- widget = glade_widget_read ((gpointer) project, interface->toplevels[i]);
-
- if (!widget)
- {
- g_warning ("Failed to read a <widget> tag");
- continue;
- }
-
- glade_project_add_object (project, NULL, widget->object);
+ glade_widget_write (widget, context, root);
}
-
- /* Reset project status here too so that you get a clean
- * slate after calling glade_project_open().
- */
- project->priv->modified = FALSE;
- project->priv->loading = FALSE;
-
- /* Emit "parse-finished" signal */
- g_signal_emit (project, glade_project_signals [PARSE_FINISHED], 0);
- /* Now we have to loop over all the object properties
- * and fix'em all ('cause they probably weren't found)
- */
- glade_project_fix_object_props (project);
-
- return TRUE;
+ return context;
}
-#endif // LOADING_WAS_IMPLEMENTED
-
-
/**
* glade_project_load:
* @path:
Modified: trunk/gladeui/glade-xml-utils.c
==============================================================================
--- trunk/gladeui/glade-xml-utils.c (original)
+++ trunk/gladeui/glade-xml-utils.c Fri Apr 4 20:13:27 2008
@@ -649,6 +649,16 @@
return (GladeXmlNode *) xmlNewDocNode ((xmlDocPtr) context->doc, context->ns, BAD_CAST(name), NULL);
}
+
+GladeXmlNode *
+glade_xml_node_new_comment (GladeXmlContext *context, const gchar *comment)
+{
+ g_return_val_if_fail (context != NULL, NULL);
+ g_return_val_if_fail (comment != NULL, NULL);
+
+ return (GladeXmlNode *) xmlNewDocComment ((xmlDocPtr) context->doc, BAD_CAST(comment));
+}
+
void
glade_xml_node_delete (GladeXmlNode *node)
Modified: trunk/gladeui/glade-xml-utils.h
==============================================================================
--- trunk/gladeui/glade-xml-utils.h (original)
+++ trunk/gladeui/glade-xml-utils.h Fri Apr 4 20:13:27 2008
@@ -22,6 +22,7 @@
/* Used for catalog tags and attributes */
#define GLADE_XML_TAG_PROJECT "glade-interface"
#define GLADE_XML_TAG_REQUIRES "requires"
+#define GLADE_XML_TAG_LIB "lib"
#define GLADE_XML_TAG_WIDGET "widget"
#define GLADE_XML_TAG_PROPERTY "property"
#define GLADE_XML_TAG_CLASS "class"
@@ -167,6 +168,7 @@
/* Node operations */
GladeXmlNode * glade_xml_node_new (GladeXmlContext *context, const gchar *name);
+GladeXmlNode * glade_xml_node_new_comment (GladeXmlContext *context, const gchar *comment);
void glade_xml_node_delete (GladeXmlNode *node);
GladeXmlNode * glade_xml_node_get_children (GladeXmlNode *node);
GladeXmlNode * glade_xml_node_next (GladeXmlNode *node_in);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]