Re: [mlview-list][patch] colours
- From: dodji <dodji seketeli org>
- To: Nicolas Centa <nicolas centa free fr>
- Cc: mlview-list gnome org
- Subject: Re: [mlview-list][patch] colours
- Date: Tue, 02 Dec 2003 22:24:51 +0100
Hi Nicolas,
I have just applied the patch after making a lot of modifications:
* added a dependency on eel to use their gconf helpers. This eases the
overall gconf keys management code we have today.
* merged the patch with the xml entity declaration nodes work I have
been doing for a week now. The colour of entity declaration nodes is now
configurable and based on this new code.
Well, thank you a lot for this patch.
Best wishes,
Dodji.
Le ven 28/11/2003 à 19:32, Nicolas Centa a écrit :
> Hello,
>
> You can apply this patch instead of the previous colours/gconf patch :
> this one allows you to change the attributes' values colours (the
> flashing green).
>
> Nicolas Centa
> "HappyPeng"
>
> ______________________________________________________________________
> ? colours.diff
> ? depcomp
> ? install-sh
> ? missing
> ? mkinstalldirs
> ? schemas/Makefile.in
> Index: schemas/mlview.schemas
> ===================================================================
> RCS file: /cvs/gnome/mlview/schemas/mlview.schemas,v
> retrieving revision 1.4
> diff -a -u -r1.4 mlview.schemas
> --- schemas/mlview.schemas 16 Nov 2003 18:36:04 -0000 1.4
> +++ schemas/mlview.schemas 28 Nov 2003 18:28:03 -0000
> @@ -25,5 +25,71 @@
> feature is activated.</long>
> </locale>
> </schema>
> + <schema>
> + <key>/schemas/apps/mlview/colours/xml-element-node</key>
> + <applyto>/apps/mlview/colours/xml-element-node</applyto>
> + <owner>mlview</owner>
> + <type>string</type>
> + <default>#0080ff</default>
> + <locale name="C">
> + <short>Element node colour in mlview</short>
> + <long>Element node colour in mlview's trees.</long>
> + </locale>
> + </schema>
> + <schema>
> + <key>/schemas/apps/mlview/colours/xml-text-node</key>
> + <applyto>/apps/mlview/colours/xml-text-node</applyto>
> + <owner>mlview</owner>
> + <type>string</type>
> + <default>#ff0000</default>
> + <locale name="C">
> + <short>Text node colour in mlview</short>
> + <long>Text node colour in mlview's trees.</long>
> + </locale>
> + </schema>
> + <schema>
> + <key>/schemas/apps/mlview/colours/xml-comment-node</key>
> + <applyto>/apps/mlview/colours/xml-comment-node</applyto>
> + <owner>mlview</owner>
> + <type>string</type>
> + <default>#0000FF</default>
> + <locale name="C">
> + <short>Comment node colour in mlview</short>
> + <long>Comment node colour in mlview's trees.</long>
> + </locale>
> + </schema>
> + <schema>
> + <key>/schemas/apps/mlview/colours/xml-document-node</key>
> + <applyto>/apps/mlview/colours/xml-document-node</applyto>
> + <owner>mlview</owner>
> + <type>string</type>
> + <default>#0080ff</default>
> + <locale name="C">
> + <short>Document node colour in mlview</short>
> + <long>Document node colour in mlview's trees.</long>
> + </locale>
> + </schema>
> + <schema>
> + <key>/schemas/apps/mlview/colours/xml-dtd-node</key>
> + <applyto>/apps/mlview/colours/xml-dtd-node</applyto>
> + <owner>mlview</owner>
> + <type>string</type>
> + <default>#ff00ff</default>
> + <locale name="C">
> + <short>DTD node colour in mlview</short>
> + <long>DTD node colour in mlview's trees.</long>
> + </locale>
> + </schema>
> + <schema>
> + <key>/schemas/apps/mlview/colours/xml-attribute-value</key>
> + <applyto>/apps/mlview/colours/xml-attribute-value</applyto>
> + <owner>mlview</owner>
> + <type>string</type>
> + <default>#00ff00</default>
> + <locale name="C">
> + <short>Attribute value colour in mlview</short>
> + <long>Attribute value colour in mlview's trees.</long>
> + </locale>
> + </schema>
> </schemalist>
> </gconfschemafile>
> Index: src/mlview-app-context.c
> ===================================================================
> RCS file: /cvs/gnome/mlview/src/mlview-app-context.c,v
> retrieving revision 1.29
> diff -a -u -r1.29 mlview-app-context.c
> --- src/mlview-app-context.c 24 Nov 2003 22:07:25 -0000 1.29
> +++ src/mlview-app-context.c 28 Nov 2003 18:28:03 -0000
> @@ -857,6 +857,95 @@
> }
> }
>
> +/* Some gconf-related utilities to load many keys in only some
> + lines */
> +
> +#define GCONF_SEPARATOR "/"
> +
> +void
> +mlview_gconf_free_values (GConfValue **values, const gint nb_keys)
> +{
> + gint i;
> +
> + for (i = 0 ; i < nb_keys ; i++)
> + {
> + gconf_value_free (values [i]);
> + }
> + g_free (values);
> +}
> +
> +void
> +mlview_gconf_free_strings (gchar **values, const gint nb_keys)
> +{
> + gint i;
> +
> + for (i = 0 ; i < nb_keys ; i++)
> + {
> + g_free (values [i]);
> + }
> + g_free (values);
> +}
> +
> +GConfValue **
> +mlview_gconf_read_values (GConfClient *client, const gchar *root,
> + const gchar **keys, const gint nb_keys, GError **err)
> +{
> + GConfValue **values;
> + gint i;
> + gchar *path;
> + GError *tmp_err = NULL;
> +
> + values = g_new (GConfValue*, nb_keys);
> + for (i = 0 ; i < nb_keys ; i++)
> + {
> + path = g_build_path (GCONF_SEPARATOR, root, keys [i], NULL);
> + values [i] = gconf_client_get (client, path, &tmp_err);
> + g_free (path);
> + if (tmp_err != NULL)
> + {
> + g_propagate_error (err, tmp_err);
> + mlview_gconf_free_values (values, i - 1);
> +
> + return NULL;
> + }
> + }
> +
> + return values;
> +}
> +
> +gchar **
> +mlview_gconf_read_strings (GConfClient *client, const gchar *root,
> + const gchar **keys, const gint nb_keys, GError **err)
> +{
> + GConfValue **values;
> + gint i;
> + GError *tmp_err = NULL;
> + gchar **ret;
> +
> + values = mlview_gconf_read_values (client, root, keys, nb_keys, &tmp_err);
> + if (tmp_err != NULL)
> + {
> + g_propagate_error (err, tmp_err);
> +
> + return NULL;
> + }
> + ret = g_new (gchar*, nb_keys);
> + for (i = 0 ; i < nb_keys ; i++)
> + {
> + ret [i] = g_strdup (gconf_value_get_string (values [i]));
> + gconf_value_free (values [i]);
> + }
> + g_free (values);
> +
> + return ret;
> +}
> +
> +/* Colours keys */
> +
> +const gchar *colours_dir = "/apps/mlview/colours";
> +const gchar *colours_keys [] = {"xml-element-node", "xml-text-node", "xml-comment-node",
> +"xml-document-node", "xml-dtd-node", "xml-attribute-value"};
> +
> /**
> *Loads all the gconf keys defined by the MlView application.
> * param a_this the current instance of the #MlViewAppContext.
> @@ -912,6 +1001,19 @@
> gconf_value_free (value) ;
> value = NULL ;
> }
> +
> + /* Colours */
> + settings->colours = mlview_gconf_read_strings (gconf_client,
> + colours_dir,
> + colours_keys,
> + MLVIEW_COLOURS_NB,
> + NULL);
> + if (!settings->colours) {
> + mlview_utils_trace_info
> + ("inconsistent gconf settings");
> + status = MLVIEW_ERROR;
> + goto cleanup;
> + }
>
> cleanup:
> if (value) {
> @@ -1160,6 +1262,10 @@
> }
>
> if (PRIVATE (ctxt)->settings) {
> + if (PRIVATE (ctxt)->settings->colours) {
> + mlview_gconf_free_strings (PRIVATE (ctxt)->settings->colours,
> + MLVIEW_COLOURS_NB);
> + }
> g_free (PRIVATE (ctxt)->settings) ;
> PRIVATE (ctxt)->settings = NULL ;
> }
> Index: src/mlview-app-context.h
> ===================================================================
> RCS file: /cvs/gnome/mlview/src/mlview-app-context.h,v
> retrieving revision 1.18
> diff -a -u -r1.18 mlview-app-context.h
> --- src/mlview-app-context.h 24 Nov 2003 22:07:25 -0000 1.18
> +++ src/mlview-app-context.h 28 Nov 2003 18:28:03 -0000
> @@ -78,15 +78,27 @@
> GObjectClass parent_class;
> };
>
> +enum {
> + XML_ELEMENT_NODE_COLOUR_KEY,
> + XML_TEXT_NODE_COLOUR_KEY,
> + XML_COMMENT_NODE_COLOUR_KEY,
> + XML_DOCUMENT_NODE_COLOUR_KEY,
> + XML_DTD_NODE_COLOUR_KEY,
> + XML_ATTR_VAL_COLOUR_KEY,
> + MLVIEW_COLOURS_NB
> +} MlViewColourKey;
> +
> /**
> *The public application wide settings
> *data structure.
> *This data structure is readonly the
> *applicatoin.
> */
> +
> struct MlViewAppSettings {
> gint default_doc_expansion_depth ;
> gboolean validation_is_on ;
> + gchar **colours;
> } ;
>
>
> Index: src/mlview-icon-tree.c
> ===================================================================
> RCS file: /cvs/gnome/mlview/src/mlview-icon-tree.c,v
> retrieving revision 1.15
> diff -a -u -r1.15 mlview-icon-tree.c
> --- src/mlview-icon-tree.c 27 Nov 2003 19:46:21 -0000 1.15
> +++ src/mlview-icon-tree.c 28 Nov 2003 18:28:04 -0000
> @@ -61,7 +61,7 @@
> NB_COLUMNS
> };
>
> -static guchar *node_to_string_tag (xmlNode * a_node);
> +static guchar *node_to_string_tag (xmlNode * a_node, MlViewAppContext *ctxt);
> static enum MlViewStatus build_tree_model_from_xml_tree (MlViewTreeEditor2 * a_this,
> const xmlNode * a_node,
> GtkTreeIter * a_ref_iter,
> @@ -85,8 +85,8 @@
> gtk_tree_model_get (model, a_iter, XML_NODE_COLUMN,
> &xml_node, -1);
>
> - start_tag_str = node_to_string_tag (xml_node);
> - attr_str = mlview_tree_editor2_build_attrs_list_str (xml_node);
> + start_tag_str = node_to_string_tag (xml_node, a_this->app_context);
> + attr_str = mlview_tree_editor2_build_attrs_list_str (xml_node, a_this->app_context);
> if (!start_tag_str)
> return MLVIEW_OK ;
>
> @@ -223,7 +223,7 @@
> cur_node; cur_node = cur_node->next) {
> GtkTreeRowReference *row_ref = NULL;
>
> - start_tag = node_to_string_tag (cur_node);
> + start_tag = node_to_string_tag (cur_node, a_this->app_context);
> switch (a_type) {
> case INSERT_TYPE_ADD_CHILD:
> gtk_tree_store_append (model, &iter,
> @@ -302,7 +302,8 @@
> MLVIEW_ICON_TREE_CLASS
> (G_OBJECT_GET_CLASS (a_this))->icons.open_element,
> ATTRIBUTES_COLUMN,
> - mlview_tree_editor2_build_attrs_list_str (cur_node),
> + mlview_tree_editor2_build_attrs_list_str (cur_node,
> + a_this->app_context),
> ARE_ATTRIBUTES_EDITABLE_COLUMN,
> TRUE,
> -1);
> @@ -395,16 +396,17 @@
> *(e.g: <node-name attr0="val0" attr1="val1">)out of
> *an instance of xmlNode *
> * param a_node the instance of xmlNode * to consider.
> + * param ctxt the application context.
> * return the newly built start tag string.
> */
> static guchar *
> -node_to_string_tag (xmlNode * a_node)
> +node_to_string_tag (xmlNode * a_node, MlViewAppContext *ctxt)
> {
> guchar *result = NULL,
> *content = NULL,
> *escaped_content = NULL;
> const gchar *colour_str =
> - mlview_tree_editor2_get_colour_string (a_node->type);
> + mlview_tree_editor2_get_colour_string (a_node->type, ctxt);
>
> g_return_val_if_fail (a_node != NULL, NULL) ;
> if (a_node->type == XML_ELEMENT_NODE) {
> @@ -521,7 +523,7 @@
> guchar *tmp_str = NULL ;
> guchar *dtd_color = (guchar*)
> mlview_tree_editor2_get_colour_string
> - (a_node->type) ;
> + (a_node->type, ctxt) ;
> if (!a_node->name) {
> mlview_utils_trace_info
> ("a node of type XML_DTD_NODE must have a ->name field set!!") ;
> @@ -751,13 +753,14 @@
> return result;
> }
>
> +/* UNUSED
> static guchar *
> -build_attrs_list_str_from_nv_pairs (GList *list)
> +build_attrs_list_str_from_nv_pairs (GList *list, MlViewAppContext *ctxt)
> {
> guchar *result = NULL, *tmp;
> struct NameValuePair *pair;
> const gchar *attval_col = "#00FF00",
> - *attname_col = mlview_tree_editor2_get_colour_string (XML_ATTRIBUTE_NODE);
> + *attname_col = mlview_tree_editor2_get_colour_string (XML_ATTRIBUTE_NODE, ctxt);
>
> while (list)
> {
> @@ -781,7 +784,8 @@
>
> return result;
> }
> -
> +*/
> +
> static void
> node_attributes_edited_cb (GtkCellRendererText *a_renderer,
> gchar *a_cell_path,
> Index: src/mlview-tree-editor2.c
> ===================================================================
> RCS file: /cvs/gnome/mlview/src/mlview-tree-editor2.c,v
> retrieving revision 1.59
> diff -a -u -r1.59 mlview-tree-editor2.c
> --- src/mlview-tree-editor2.c 27 Nov 2003 22:47:45 -0000 1.59
> +++ src/mlview-tree-editor2.c 28 Nov 2003 18:28:05 -0000
> @@ -690,61 +690,38 @@
> }
> }
>
> -
> /**
> *Returns the color code of a given type of xml node.
> * param a_type the type of xml node to consider.
> + * param ctxt the application context.
> * return string representing the color code of the node
> *in the form "#006FFF" for example.
> */
> +
> const gchar*
> -mlview_tree_editor2_get_colour_string (xmlElementType a_type)
> +mlview_tree_editor2_get_colour_string (xmlElementType a_type,
> + MlViewAppContext *ctxt)
> {
> - switch (a_type) {
> + struct MlViewAppSettings *settings;
> +
> + g_return_val_if_fail (ctxt, "#000000");
> + settings = mlview_app_context_get_settings (ctxt);
> + g_return_val_if_fail (settings && settings->colours, "#000000");
> +
> + switch (a_type) {
> case XML_ELEMENT_NODE:
> - return "#0080ff";
> - case XML_ATTRIBUTE_NODE:
> - return "#000000";
> - case XML_TEXT_NODE:
> - return "#ff0000";
> - case XML_CDATA_SECTION_NODE:
> - return "#000000";
> - case XML_ENTITY_REF_NODE:
> - return "#000000";
> - case XML_ENTITY_NODE:
> - return "#000000";
> - case XML_PI_NODE:
> - return "#000000";
> - case XML_COMMENT_NODE:
> - return "#0000FF";
> - case XML_DOCUMENT_NODE:
> - return "#0080ff";
> - case XML_DOCUMENT_TYPE_NODE:
> - return "#000000";
> - case XML_DOCUMENT_FRAG_NODE:
> - return "#000000";
> - case XML_NOTATION_NODE:
> - return "#000000";
> - case XML_HTML_DOCUMENT_NODE:
> - return "#000000";
> - case XML_DTD_NODE:
> - return "#FF00FF";
> - case XML_ELEMENT_DECL:
> - return "#000000";
> - case XML_ATTRIBUTE_DECL:
> - return "#000000";
> - case XML_ENTITY_DECL:
> - return "#000000";
> - case XML_NAMESPACE_DECL:
> - return "#000000";
> - case XML_XINCLUDE_START:
> - return "#000000";
> - case XML_XINCLUDE_END:
> - return "#000000";
> - default:
> - return "#000000" ;
> -
> - }
> + return settings->colours [XML_ELEMENT_NODE_COLOUR_KEY];
> + case XML_TEXT_NODE:
> + return settings->colours [XML_TEXT_NODE_COLOUR_KEY];
> + case XML_COMMENT_NODE:
> + return settings->colours [XML_COMMENT_NODE_COLOUR_KEY];
> + case XML_DOCUMENT_NODE:
> + return settings->colours [XML_DOCUMENT_NODE_COLOUR_KEY];
> + case XML_DTD_NODE:
> + return settings->colours [XML_DTD_NODE_COLOUR_KEY];
> + default:
> + return "#000000";
> + }
> }
>
> /**
> @@ -752,15 +729,16 @@
> *(e.g: <node-name attr0="val0" attr1="val1">)out of
> *an instance of xmlNode *
> * param a_node the instance of xmlNode * to consider.
> + * param ctxt the application context.
> * return the newly built start tag string.
> */
> static guchar *
> -node_to_string_tag (xmlNode * a_node)
> +node_to_string_tag (xmlNode * a_node, MlViewAppContext *ctxt)
> {
> guchar *result = NULL,
> *content = NULL,
> *escaped_content = NULL;
> - const gchar *colour_str = mlview_tree_editor2_get_colour_string (a_node->type);
> + const gchar *colour_str = mlview_tree_editor2_get_colour_string (a_node->type, ctxt);
>
> g_return_val_if_fail (a_node != NULL, NULL);
>
> @@ -771,10 +749,10 @@
>
> const gchar *attr_colour_str =
> mlview_tree_editor2_get_colour_string
> - (XML_ATTRIBUTE_NODE) ;
> + (XML_ATTRIBUTE_NODE, ctxt) ;
>
> attr_str = mlview_tree_editor2_build_attrs_list_str
> - (a_node) ;
> + (a_node, ctxt) ;
> if (a_node->ns != NULL && a_node->ns->prefix) {
> ns_prefix = g_strconcat (a_node->ns->prefix,
> ":", NULL);
> @@ -922,7 +900,7 @@
> xmlDtd *node = (xmlDtd*)a_node ;
> guchar *tmp_str = NULL ;
> guchar *dtd_color = (guchar*)mlview_tree_editor2_get_colour_string
> - (a_node->type) ;
> + (a_node->type, ctxt) ;
>
> if (!a_node->name) {
> mlview_utils_trace_info
> @@ -1100,7 +1078,7 @@
> cur_node; cur_node = cur_node->next) {
> GtkTreeRowReference *row_ref = NULL;
>
> - start_tag = node_to_string_tag (cur_node);
> + start_tag = node_to_string_tag (cur_node, a_this->app_context);
> switch (a_type) {
> case INSERT_TYPE_ADD_CHILD:
> gtk_tree_store_append (model, &iter,
> @@ -1484,7 +1462,7 @@
> ("mlview_xml_doc failed") ;
> goto cleanup ;
> }
> - start_tag = node_to_string_tag (cur_node) ;
> + start_tag = node_to_string_tag (cur_node, tree_editor->app_context) ;
> if (cur_node->type == XML_ELEMENT_NODE) {
> status = mlview_utils_parse_start_tag
> (a_new_text, &element_name, &nv_pair_list) ;
> @@ -2271,21 +2249,31 @@
> *construct a string which looks like
> *'attrname0="attrval0" attrname1=attrvall'
> *where each attrnamei is
> - * param a_node the node to build the attribute list from.
> + * param a_node the node to build the attribute list from.
> + * param ctxt the application context.
> * return the newly built attribute list string, or NULL if something
> *bad happened.
> */
> guchar *
> -mlview_tree_editor2_build_attrs_list_str (xmlNode * a_node)
> +mlview_tree_editor2_build_attrs_list_str (xmlNode * a_node, MlViewAppContext *ctxt)
> {
> enum MlViewStatus status = MLVIEW_OK ;
> xmlAttrPtr attr_iter = NULL ;
> - const gchar *attval_col = "#00FF00",
> - *attname_col = mlview_tree_editor2_get_colour_string (XML_ATTRIBUTE_NODE);
> + const gchar *attval_col,
> + *attname_col = mlview_tree_editor2_get_colour_string (XML_ATTRIBUTE_NODE, ctxt);
> gchar *attribute, *result = NULL, *tmp = NULL ;
> guchar *escaped_content = NULL;
> guint esc_content_len = 0 ;
> + struct MlViewAppSettings *settings;
>
> + settings = mlview_app_context_get_settings (ctxt);
> + if (settings && settings->colours) {
> + attval_col = settings->colours [XML_ATTR_VAL_COLOUR_KEY];
> + }
> + else {
> + attval_col = "#000000";
> + }
> +
> g_return_val_if_fail (a_node, NULL);
>
> for (attr_iter = a_node->properties;
> @@ -3767,7 +3755,7 @@
> g_return_val_if_fail (model, MLVIEW_ERROR);
> gtk_tree_model_get (model, a_iter, XML_NODE_COLUMN,
> &xml_node, -1);
> - start_tag_str = node_to_string_tag (xml_node);
> + start_tag_str = node_to_string_tag (xml_node, a_this->app_context);
> if (!start_tag_str) {
> return MLVIEW_OK;
> }
> Index: src/mlview-tree-editor2.h
> ===================================================================
> RCS file: /cvs/gnome/mlview/src/mlview-tree-editor2.h,v
> retrieving revision 1.22
> diff -a -u -r1.22 mlview-tree-editor2.h
> --- src/mlview-tree-editor2.h 11 Nov 2003 00:03:12 -0000 1.22
> +++ src/mlview-tree-editor2.h 28 Nov 2003 18:28:05 -0000
> @@ -245,9 +245,11 @@
> enum MlViewStatus mlview_tree_editor2_disconnect_from_doc (MlViewTreeEditor2 *a_this,
> MlViewXMLDocument *a_doc) ;
>
> -guchar *mlview_tree_editor2_build_attrs_list_str (xmlNode *a_node);
> +guchar *mlview_tree_editor2_build_attrs_list_str (xmlNode *a_node,
> + MlViewAppContext *ctxt);
>
> -const gchar *mlview_tree_editor2_get_colour_string (xmlElementType a_type);
> +const gchar *mlview_tree_editor2_get_colour_string (xmlElementType a_type,
> + MlViewAppContext *ctxt);
>
> enum MlViewTreeInsertType {
> INSERT_TYPE_ADD_CHILD,
[Date Prev][
Date Next] [Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]