DIA_PLUGIN_CHECK_INIT PluginInitResult dia_plugin_init(PluginInfo *info) { char *shape_path; const char *home_dir; if (!dia_plugin_info_init(info, _("Custom"), _("Custom XML shapes loader"), NULL, NULL)) return DIA_PLUGIN_INIT_ERROR; home_dir = g_get_home_dir(); if (home_dir) { home_dir = dia_config_filename("shapes"); load_shapes_from_tree(home_dir); g_free((char *)home_dir); } shape_path = getenv("DIA_SHAPE_PATH"); if (shape_path) { char **dirs = g_strsplit(shape_path, G_SEARCHPATH_SEPARATOR_S, 0); int i; for (i = 0; dirs[i] != NULL; i++) load_shapes_from_tree(dirs[i]); g_strfreev(dirs); } else { char *thedir = dia_get_data_directory("shapes"); load_shapes_from_tree(thedir); g_free(thedir); } return DIA_PLUGIN_INIT_OK; }
static void load_accels(void) { gchar *accelfilename; /* load accelerators and prepare to later save them */ accelfilename = dia_config_filename("menurc"); if (accelfilename) { gtk_accel_map_load(accelfilename); g_free(accelfilename); } }
static gint save_accels(gpointer data) { gchar *accelfilename; accelfilename = dia_config_filename("menurc"); if (accelfilename) { gtk_accel_map_save (accelfilename); g_free (accelfilename); } return TRUE; }
/** * dia_object_defaults_save: * * Saves all the currently created default objects into a * valid diagram file. All the objects are placed into * separate invisible layers. */ gboolean dia_object_defaults_save (const gchar *filename) { MyRootInfo ni; xmlDocPtr doc; gboolean ret; gchar *real_filename; int old_blanks_default = pretty_formated_xml; /* FIXME HACK: we always want nice readable default files, * but toggling it by a global var is ugly --hb */ pretty_formated_xml = TRUE; if (!filename) real_filename = dia_config_filename("defaults.dia"); else real_filename = g_strdup (filename); doc = xmlNewDoc((const xmlChar *)"1.0"); doc->encoding = xmlStrdup((const xmlChar *)"UTF-8"); doc->xmlRootNode = xmlNewDocNode(doc, NULL, (const xmlChar *)"diagram", NULL); ni.name_space = xmlNewNs(doc->xmlRootNode, (const xmlChar *)DIA_XML_NAME_SPACE_BASE, (const xmlChar *)"dia"); xmlSetNs(doc->xmlRootNode, ni.name_space); ni.obj_nr = 0; ni.node = doc->xmlRootNode; ni.filename = real_filename; ni.layer_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); g_hash_table_foreach (defaults_hash, _obj_store, &ni); ret = xmlDiaSaveFile (real_filename, doc); g_free (real_filename); xmlFreeDoc(doc); pretty_formated_xml = old_blanks_default; g_hash_table_destroy (ni.layer_hash); return ret; }
/** * Basic (i.e. minimal) initialization of libdia. * * It does not load any plug-ins but instead brings libdia to a state that plug-in loading can take place. * @param flags a set of DIA_INTERACTIVE, DIA_MESSAGE_STDERR */ void libdia_init (guint flags) { static gboolean initialized = FALSE; if (initialized) return; if (flags & DIA_MESSAGE_STDERR) set_message_func(stderr_message_internal); LIBXML_TEST_VERSION; #ifdef G_OS_WIN32 xmlSetGenericErrorFunc(NULL, myXmlErrorReporting); #endif if (flags & DIA_VERBOSE) { dia_log_message_enable (TRUE); dia_log_message ("initializing libdia"); } stdprops_init(); if (flags & DIA_INTERACTIVE) { char *diagtkrc; gtk_widget_set_default_colormap(gdk_rgb_get_cmap()); diagtkrc = dia_config_filename("diagtkrc"); dia_log_message ("Config from %s", diagtkrc); gtk_rc_parse(diagtkrc); g_free(diagtkrc); color_init(); } initialized = TRUE; object_registry_init(); /* The group_type is registered in app, but it needs to be exported anyway */ object_register_type(&stdpath_type); }
/** * Basic (i.e. minimal) initialization of libdia. * * It does not load any plug-ins but instead brings libdia to a state that plug-in loading can take place. * @param flags a set of DIA_INTERACTIVE, DIA_MESSAGE_STDERR */ void libdia_init (guint flags) { static gboolean initialized = FALSE; if (initialized) return; if (flags & DIA_MESSAGE_STDERR) set_message_func(stderr_message_internal); LIBXML_TEST_VERSION; #ifdef G_OS_WIN32 xmlSetGenericErrorFunc(NULL, myXmlErrorReporting); #endif if (flags & DIA_VERBOSE) { dia_log_message_enable (TRUE); dia_log_message ("initializing libdia"); } stdprops_init(); if (flags & DIA_INTERACTIVE) { char *diagtkrc; dia_image_init(); diagtkrc = dia_config_filename("diagtkrc"); dia_log_message ("Config from %s", diagtkrc); gtk_rc_parse(diagtkrc); g_free(diagtkrc); color_init(); } initialized = TRUE; object_registry_init(); }
/** * @param filename the file to load from or NULL for default * @param create_lazy if FALSE creates default objects for * every known type. Otherwise default objects * are created on demand * * Create all the default objects. */ gboolean dia_object_defaults_load (const gchar *filename, gboolean create_lazy) { xmlDocPtr doc; xmlNsPtr name_space; ObjectNode obj_node, layer_node; object_default_create_lazy = create_lazy; if (!defaults_hash) { defaults_hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, _obj_destroy); if (!create_lazy) object_registry_foreach (_obj_create, defaults_hash); } /* overload properties from file */ if (!filename) { gchar *default_filename = dia_config_filename("defaults.dia"); if (g_file_test(default_filename, G_FILE_TEST_EXISTS)) doc = xmlDiaParseFile(default_filename); else doc = NULL; g_free (default_filename); } else doc = xmlDiaParseFile(filename); if (!doc) return FALSE; name_space = xmlSearchNs(doc, doc->xmlRootNode, (const xmlChar *)"dia"); if (xmlStrcmp (doc->xmlRootNode->name, (const xmlChar *)"diagram") || (name_space == NULL)) { message_error(_("Error loading defaults '%s'.\n" "Not a Dia diagram file."), dia_message_filename(filename)); xmlFreeDoc (doc); return FALSE; } layer_node = doc->xmlRootNode->xmlChildrenNode; while (layer_node) { if ( !xmlIsBlankNode(layer_node) && 0 == xmlStrcmp(layer_node->name, (const xmlChar *)"layer")) { obj_node = layer_node->xmlChildrenNode; while (obj_node) { if (!xmlIsBlankNode(obj_node) && 0 == xmlStrcmp(obj_node->name, (const xmlChar *)"object")) { char *typestr = (char *) xmlGetProp(obj_node, (const xmlChar *)"type"); char *version = (char *) xmlGetProp(obj_node, (const xmlChar *)"version"); if (typestr) { DiaObject *obj = g_hash_table_lookup (defaults_hash, typestr); if (!obj) { if (!create_lazy) g_warning ("Unknown object '%s' while reading '%s'", typestr, filename); else { DiaObjectType *type = object_get_type (typestr); if (type) obj = type->ops->load ( obj_node, 0, filename); if (obj) g_hash_table_insert (defaults_hash, obj->type->name, obj); } } else { #if 0 /* lots of complaining about missing attributes */ object_load_props(obj, obj_node); /* leaks ?? */ #else DiaObject *def_obj; def_obj = obj->type->ops->load ( obj_node, /*version ? atoi(version) : 0,*/0, filename); if (def_obj->ops->set_props) { object_copy_props (obj, def_obj, TRUE); def_obj->ops->destroy (def_obj); } else { /* can't copy props */ g_hash_table_replace (defaults_hash, def_obj->type->name, def_obj); } #endif } if (version) xmlFree (version); xmlFree (typestr); } } obj_node = obj_node->next; } } layer_node = layer_node->next; } xmlFreeDoc(doc); return TRUE; }