[Buoh-dev] Propiedades



El vie, 19-08-2005 a las 16:13 +0200, Pablo Arroyo escribi?:
> > cada vez que llamas a g_markup_printf_escaped se reserva memoria, la
> > segunda vez que lo llamas reservas memoria y pierdes el puntero a la
> > zona que reservaste con la primera llamada, con lo que no podr? ser
> > liberada. Esto es otra consecuencia de lo que le dec?a el otro dia a
> > esteban, es mejor liberar la memoria en cuanto no la necesitas.
> ok, cuando hice esto dud? un poquillo.

cuando dudes, vete a mirar el c?digo y sales de dudas

> >  
> > 
> > En este caso concreto ni siquiera es necesario la variable markup.
> La
> > funci?n g_markup_printf_escaped se utiliza cuando las cadena
> contiene
> > caracteres com <> y otros especiales, pero que no son del marcado de
> > pango, sino que son de la propia cadena, supon que estas escribiendo
> una
> > cadena xml o html. En nuestro caso puedes utilizar directamente
> > gtk_label_set_markup (GTK_LABEL (label_uri), <b>cadena</b>) y no
> > necesitas de una variable auxiliar.
> > 
> > La cadena URI no es muy user-friendly, la mayor?a de mis amigos no
> > sabr?an lo que es. Por otro lado sabemos que la uri es siempre una
> > direcci?n http por lo que podr?amos usar URL mas ampliamente
> utilizado,
> > pero seguir?a siendo t?cnico. Quiz?s algo como direcci?n de internet
> o
> > algo as?, no se. Como llaman vuestros padre/amigos a las urls?
> vale, le he puesto "Link", a ver si os parece bien. De momento he
> dejado
> comentado lo del ellipsize porque no me gusta como queda.
> 
> > 
> > > +       
> > > +       label_title_val    = gtk_label_new (buoh_comic_get_title
> > > (comic));
> > 
> > leak
> > 
> > > +       label_author_val   = gtk_label_new (buoh_comic_get_author
> > > (comic));
> > 
> > leak
> > 
> > > +       label_uri_val      = gtk_label_new (buoh_comic_get_uri
> > > (comic));
> > 
> > leak
> > 
> > > +       label_languaje_val = gtk_label_new
> (buoh_comic_get_languaje
> > > (comic));
> > 
> > leak
> > 
> > Cada vez que pides un atributo de una comic se te entrega una copia.
> > Cuando estableces la etiqueta a un label si te fijas recibe con un
> const
> > gchar * lo cual nos dice que el label copiar? la cadena que le des,
> pero
> > no la modificar? y por tanto no la liberar?. Si no utilizas una
> variable
> > auxiliar en este caso no podr?s liberar esa memoria, puesto que el
> > puntero se lo estas entregando directamente a la funci?n.
> amms, no se me habr?a ocurrido.
> 
> 
> 
> Ya cambi? lo del languaJe :). Ah? va el parche de nuevo
> Index: ChangeLog
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/ChangeLog,v
> retrieving revision 1.35
> diff -u -r1.35 ChangeLog
> --- ChangeLog   18 Aug 2005 18:37:13 -0000      1.35
> +++ ChangeLog   19 Aug 2005 14:06:36 -0000
> @@ -1,3 +1,12 @@
> +2005-08-19  Pablo Arroyo <zioma linups org>
> +
> +       * src/buoh-properties-dialog.c: Now it shows some properties
> of the
> +       comic.
> +       
> +       * data/comic.xml: Added the languaje label.
> +       
> +       * src/buoh-comic.c: Added the languaje atribute to the comic
> object.
> +
>  2005-08-18  Carlos Garcia Campos  <carlosgc gnome org>
>  
>         * src/buoh.c: We prefer g_free instead of xmlFree

te falta cambiar aqu? tb lo de language

> Index: src/buoh-comic.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-comic.c,v
> retrieving revision 1.1
> diff -u -r1.1 buoh-comic.c
> --- src/buoh-comic.c    25 Jul 2005 19:03:45 -0000      1.1
> +++ src/buoh-comic.c    19 Aug 2005 14:06:39 -0000
> @@ -31,13 +31,15 @@
>         PROP_0,
>         PROP_TITLE,
>         PROP_AUTHOR,
> +       PROP_LANGUAGE,
>         PROP_ID,
> -               PROP_PIXBUF
> +       PROP_PIXBUF
>  };
>  
>  struct _BuohComicPrivate {
>         gchar     *author;
>         gchar     *title;
> +       gchar     *language;
>         gchar     *id;
>         GdkPixbuf *pixbuf;
>  };
> @@ -90,10 +92,11 @@
>            
>         buoh_comic->priv = BUOH_COMIC_GET_PRIVATE (buoh_comic);
>         
> -       buoh_comic->priv->author = NULL;
> -       buoh_comic->priv->title  = NULL;
> -       buoh_comic->priv->id     = NULL;
> -       buoh_comic->priv->pixbuf = NULL;
> +       buoh_comic->priv->author   = NULL;
> +       buoh_comic->priv->title    = NULL;
> +       buoh_comic->priv->language = NULL;
> +       buoh_comic->priv->id       = NULL;
> +       buoh_comic->priv->pixbuf   = NULL;
>  }
>  
>  static void
> @@ -123,6 +126,15 @@
>                                                               NULL,
> 
> G_PARAM_READWRITE));
>         g_object_class_install_property (object_class,
> +                                        PROP_LANGUAGE,
> +                                        g_param_spec_string
> ("language",
> +
> "Language",
> +
> "Language of the comic",
> +                                                             NULL,
> +
> G_PARAM_READWRITE));
> +
> +       
> +       g_object_class_install_property (object_class,
>                                          PROP_ID,
>                                          g_param_spec_string ("id",
>                                                               "Id",
> @@ -157,6 +169,11 @@
>                 comic->priv->title = NULL;
>         }
>  
> +       if (comic->priv->language) {
> +               g_free (comic->priv->language);
> +               comic->priv->language = NULL;
> +       }
> +
>         if (comic->priv->pixbuf) {
>                 g_object_unref (comic->priv->pixbuf);
>                 comic->priv->pixbuf = NULL;
> @@ -185,6 +202,11 @@
>                 comic->priv->author = g_value_dup_string (value);
>                 
>                 break;
> +       case PROP_LANGUAGE:
> +               g_free (comic->priv->language);
> +               comic->priv->language = g_value_dup_string (value);
> +
> +               break;
>         case PROP_ID:
>                 g_free (comic->priv->id);
>                 comic->priv->id = g_value_dup_string (value);
> @@ -219,6 +241,10 @@
>                 g_value_set_string (value, comic->priv->author);
>                 
>                 break;
> +       case PROP_LANGUAGE:
> +               g_value_set_string (value, comic->priv->language);
> +
> +               break;
>         case PROP_ID:
>                 g_value_set_string (value, comic->priv->id);
>                 
> @@ -245,7 +271,8 @@
>  BuohComic *
>  buoh_comic_new_with_info (const gchar *id,
>                           const gchar *title,
> -                         const gchar *author)
> +                         const gchar *author,
> +                         const gchar *language)
>  {
>         BuohComic *comic;
>  
> @@ -255,6 +282,7 @@
>                       "id", id,
>                       "title", title,
>                       "author", author,
> +                     "language", language,
>                       NULL);
>  
>         return comic;
> @@ -322,6 +350,14 @@
>  }
>  
>  void
> +buoh_comic_set_language (BuohComic *comic, const gchar *language)
> +{
> +       g_return_if_fail (BUOH_IS_COMIC (comic));
> +
> +       g_object_set (G_OBJECT (comic), "language", language, NULL);
> +}
> +
> +void
>  buoh_comic_set_id (BuohComic *comic, const gchar *id)
>  {
>         g_return_if_fail (BUOH_IS_COMIC (comic));
> @@ -374,6 +410,18 @@
>         g_object_get (G_OBJECT (comic), "author", &author, NULL);
>  
>         return author;
> +}
> +
> +gchar *
> +buoh_comic_get_language (BuohComic *comic)
> +{
> +       gchar *language = NULL;
> +
> +       g_return_val_if_fail (BUOH_IS_COMIC (comic), NULL);
> +
> +       g_object_get (G_OBJECT (comic), "language", &language, NULL);
> +
> +       return language;
>  }
>  
>  gchar *
> Index: src/buoh-comic.h
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-comic.h,v
> retrieving revision 1.1
> diff -u -r1.1 buoh-comic.h
> --- src/buoh-comic.h    25 Jul 2005 19:03:45 -0000      1.1
> +++ src/buoh-comic.h    19 Aug 2005 14:06:39 -0000
> @@ -58,7 +58,8 @@
>  BuohComic *buoh_comic_new           (void);
>  BuohComic *buoh_comic_new_with_info (const gchar *id,
>                                      const gchar *title,
> -                                    const gchar *author);
> +                                    const gchar *author,
> +                                    const gchar *language);
>  
>  /*gboolean comic_is_the_last (Comic *comic);*/
>  
> @@ -69,6 +70,8 @@
>                                             const gchar *title);
>  void       buoh_comic_set_author           (BuohComic   *comic,
>                                             const gchar *author);
> +void       buoh_comic_set_language         (BuohComic   *comic,
> +                                           const gchar *language);
>  void       buoh_comic_set_id               (BuohComic   *comic,
>                                             const gchar *id);
>  void       buoh_comic_set_pixbuf           (BuohComic   *comic,
> @@ -78,6 +81,7 @@
>  gchar     *buoh_comic_get_uri              (BuohComic   *comic);
>  gchar     *buoh_comic_get_title            (BuohComic   *comic);
>  gchar     *buoh_comic_get_author           (BuohComic   *comic);
> +gchar     *buoh_comic_get_language         (BuohComic   *comic);
>  gchar     *buoh_comic_get_id               (BuohComic   *comic);
>  gchar     *buoh_comic_get_page             (BuohComic   *comic);
>  gchar     *buoh_buoh_comic_get_uri         (BuohComic   *comic);
> Index: src/buoh-properties-dialog.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-properties-dialog.c,v
> retrieving revision 1.2
> diff -u -r1.2 buoh-properties-dialog.c
> --- src/buoh-properties-dialog.c        25 Jul 2005 19:03:45
> -0000      1.2
> +++ src/buoh-properties-dialog.c        19 Aug 2005 14:06:40 -0000
> @@ -93,11 +93,99 @@
>  void
>  buoh_properties_dialog_set_comic (BuohPropertiesDialog *dialog,
> BuohComic *comic)
>  {
> +       GtkWidget *table;
> +       GtkWidget *label_title, *label_title_val;
> +       GtkWidget *label_author, * label_author_val;
> +       GtkWidget *label_uri, *label_uri_val;
> +       GtkWidget *label_language, *label_language_val;
> +       gchar     *title, *author, *uri, *language;
> +       
>         g_return_if_fail (BUOH_IS_COMIC (comic));
>  
>         dialog->priv->comic = comic;
>  
> -       /* TODO: fill the dialog */
> +       table = gtk_table_new (4, 2, FALSE);
> +       
> +       label_title = gtk_label_new (NULL);
> +       gtk_label_set_markup (GTK_LABEL (label_title),
> "<b>Title:</b>");
> +
> +       label_author = gtk_label_new (NULL);
> +       gtk_label_set_markup (GTK_LABEL (label_author),
> "<b>Author:</b>");
> +
> +       label_uri = gtk_label_new (NULL);       
> +       gtk_label_set_markup (GTK_LABEL (label_uri), "<b>Link:</b>");
> +
> +       label_language = gtk_label_new (NULL);  
> +       gtk_label_set_markup (GTK_LABEL (label_language),
> "<b>Language:</b>");
> +
> +       g_object_get (comic,
> +                     "title", &title,
> +                     "author", &author,
> +                     "language", &language, NULL);
> +
> +       uri = buoh_comic_get_uri (comic);
> +       
> +       label_title_val    = gtk_label_new (title);
> +       label_author_val   = gtk_label_new (author);
> +       label_uri_val      = gtk_label_new (uri);
> +       label_language_val = gtk_label_new (language);
> +
> +       g_free (title);
> +       g_free (author);
> +       g_free (uri);
> +       g_free (language);
> +       
> +       gtk_label_set_selectable (GTK_LABEL (label_title_val), TRUE);
> +       gtk_label_set_selectable (GTK_LABEL (label_author_val), TRUE);
> +       gtk_label_set_selectable (GTK_LABEL (label_uri_val), TRUE);
> +       gtk_label_set_selectable (GTK_LABEL (label_language_val),
> TRUE);
> +       
> +       gtk_misc_set_alignment (GTK_MISC (label_title), 0, 0.5);
> +       gtk_misc_set_alignment (GTK_MISC (label_author), 0, 0.5);
> +       gtk_misc_set_alignment (GTK_MISC (label_uri), 0, 0.5);
> +       gtk_misc_set_alignment (GTK_MISC (label_language), 0, 0.5);
> +
> +       gtk_misc_set_alignment (GTK_MISC (label_title_val), 0, 0.5);
> +       gtk_misc_set_alignment (GTK_MISC (label_author_val), 0, 0.5);
> +       gtk_misc_set_alignment (GTK_MISC (label_uri_val), 0, 0.5);
> +       gtk_misc_set_alignment (GTK_MISC (label_language_val), 0,
> 0.5);

Una cosilla de estilo: en el resto del c?digo del buoh (tras mis
cambios) la forma general de actuar es:

* creo un widget
* lo configuro

cuando lo he metido en un contenedor

* lo muestro

de esta forma encuentro r?pidamente la configuraci?n de cada objeto, y
mostr?ndolo despu?s de meterlo en un contenedor me aseguro que no
muestro nada que no tengo que mostrar.

Son un poco man?as m?as, lo se, pero aunque sea por consistencia con el
resto del c?digo vamos a hacerlo as?. La idea es, para el caso anterior:

label_title = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label_title), "<b>Title:</b>");
gtk_misc_set_alignment (GTK_MISC (label_title), 0, 0.5);

label_author = gtk_label_new (NULL);
................

etc.

> +       /* gtk_label_set_ellipsize (GTK_LABEL (label_uri_val),
> PANGO_ELLIPSIZE_END); */

quita los comentarios, con los cambios que te digo abajo, queda bien.
Adem?s si ves que el di?logo es muy peque?o y se ve muy poco del uri,
dale un tama?o m?inimo a la etiqueta con gtk_label_set_width_chars

> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_title),
> +                         0, 1, 0, 1);
> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_title_val),
> +                         1, 2, 0, 1);
> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_author),
> +                         0, 1, 1, 2);
> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_author_val),
> +                         1, 2, 1, 2);
> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_uri),
> +                         0, 1, 2, 3);
> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_uri_val),
> +                         1, 2, 2, 3);
> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_language),
> +                         0, 1, 3, 4);
> +       gtk_table_attach_defaults (GTK_TABLE (table), GTK_WIDGET
> (label_language_val),
> +                         1, 2, 3, 4);

estas lineas est?n mal identadas, debe haber sido al pasar del attach al
attach_defaults
Por qu? has pasado a usar attach_defaults en vez de attach como en el
primer parche?

Para obtener el comportamiento deseado en cuanto a expand y fill es
necesario utilizar el attach. Vi en el parche anterior que utilizabas
n?mero en vez de el valor del enumerado, mejor usa el enumerado, porque
con tanto numero no ha quien entienda eso, creo que se entiende mejor
GTK_EXPAND, que 0, no?

Bueno, pues el comportamiento que queremos se consigue de la siguiente
forma. Para las etiquetas de titulo queremos que se rellenen en x y en y
pero que no se expandan, ejemplo:

gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (label_title),
                          0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);

Para las etiquetas que son de valor queremos que se rellenen y expandan
en X, pero que solo se rellenen en y. Por ejemplo:

gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (label_uri_val),
                          1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL,
0, 0);

Con eso conseguimos que el ellipsize no quede mal.

> +       gtk_table_set_row_spacings (GTK_TABLE (table), 6);
> +       gtk_table_set_col_spacings (GTK_TABLE (table), 6);

para las filas deja 6, pero para columnas mejor 12
              
> +       gtk_widget_show (label_title);
> +       gtk_widget_show (label_title_val);
> +       gtk_widget_show (label_author);
> +       gtk_widget_show (label_author_val);
> +       gtk_widget_show (label_uri);
> +       gtk_widget_show (label_uri_val);
> +       gtk_widget_show (label_language);
> +       gtk_widget_show (label_language_val);
> +
> +       gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG
> (dialog)->vbox),
> +                                    GTK_WIDGET (table));
> +
> +       gtk_widget_show (table);
> +       
>  }
>  
>  GtkWidget *
> Index: src/buoh.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh.c,v
> retrieving revision 1.15
> diff -u -r1.15 buoh.c
> --- src/buoh.c  18 Aug 2005 18:37:13 -0000      1.15
> +++ src/buoh.c  19 Aug 2005 14:06:40 -0000
> @@ -136,7 +136,7 @@
>         xmlNodePtr    node;
>         xmlNodePtr    child;
>         BuohComic    *comic;
> -       xmlChar      *id, *class, *title, *author, *uri;
> +       xmlChar      *id, *class, *title, *author, *language, *uri;
>         gboolean      visible;
>         xmlChar      *restriction;
>         GDateWeekday  restriction_date;
> @@ -163,6 +163,7 @@
>                                     G_TYPE_BOOLEAN,
>                                     G_TYPE_STRING,
>                                     G_TYPE_STRING,
> +                                   G_TYPE_STRING,
>                                     G_TYPE_POINTER,
>                                     -1);
>         
> @@ -175,15 +176,17 @@
>  
>                         /* Comic simple */
>                         if (g_ascii_strcasecmp ((const gchar *)class,
> "simple") == 0) {
> -                               id     = xmlGetProp (node, (xmlChar *)
> "id");
> -                               title  = xmlGetProp (node, (xmlChar *)
> "title");
> -                               author = xmlGetProp (node, (xmlChar *)
> "author");
> -                               uri    = xmlGetProp (node, (xmlChar *)
> "generic_uri");
> +                               id       = xmlGetProp (node, (xmlChar
> *) "id");
> +                               title    = xmlGetProp (node, (xmlChar
> *) "title");
> +                               author   = xmlGetProp (node, (xmlChar
> *) "author");
> +                               language = xmlGetProp (node, (xmlChar
> *) "language");
> +                               uri      = xmlGetProp (node, (xmlChar
> *) "generic_uri");
>  
>                                 comic = BUOH_COMIC
> (comic_simple_new_with_info (
>                                                             (gchar
> *)id,
>                                                             (gchar
> *)title,
>                                                             (gchar
> *)author,
> +                                                           (gchar
> *)language,
>                                                             (gchar
> *)uri));
>  
>                                 /* Read the restrictions */
> @@ -213,12 +216,14 @@
> 
> COMIC_LIST_VISIBLE, visible,
>                                                     COMIC_LIST_TITLE,
> title,
>                                                     COMIC_LIST_AUTHOR,
> author,
> +
> COMIC_LIST_LANGUAGE, language,
>                                                     COMIC_LIST_COMIC,
> (gpointer) comic,
>                                                     -1);
>  
>                                 g_free (id);
>                                 g_free (title);
>                                 g_free (author);
> +                               g_free (language);
>                                 g_free (uri);
>                         }
>  
> Index: src/buoh.h
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh.h,v
> retrieving revision 1.3
> diff -u -r1.3 buoh.h
> --- src/buoh.h  25 Jul 2005 14:54:36 -0000      1.3
> +++ src/buoh.h  19 Aug 2005 14:06:40 -0000
> @@ -28,6 +28,7 @@
>         COMIC_LIST_VISIBLE,
>         COMIC_LIST_TITLE,
>         COMIC_LIST_AUTHOR,
> +       COMIC_LIST_LANGUAGE,
>         COMIC_LIST_COMIC,
>         N_COLUMNS
>  };
> Index: src/comic-simple.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/comic-simple.c,v
> retrieving revision 1.8
> diff -u -r1.8 comic-simple.c
> --- src/comic-simple.c  18 Aug 2005 17:30:45 -0000      1.8
> +++ src/comic-simple.c  19 Aug 2005 14:06:45 -0000
> @@ -60,7 +60,8 @@
>  enum {
>         PROP_,
>         PROP_TITLE,
> -       PROP_AUTHOR
> +       PROP_AUTHOR,
> +       PROP_LANGUAGE
>  };
>  
>  
> @@ -179,15 +180,20 @@
>  comic_simple_new_with_info (const gchar *id,
>                             const gchar *title,
>                             const gchar *author,
> +                           const gchar *language,
>                             const gchar *generic_uri)
>  {
>         ComicSimple        *comic;
>  
>         comic = comic_simple_new ();
>  
> -       g_object_set (G_OBJECT (comic), "id", id,
> -                     "title", title, "author", author,
> -                     "generic_uri", generic_uri, NULL);
> +       g_object_set (G_OBJECT (comic),
> +                     "id", id,
> +                     "title", title,
> +                     "author", author,
> +                     "language", language,
> +                     "generic_uri", generic_uri,
> +                     NULL);
>            
>         return COMIC_SIMPLE (comic);
>  }
> Index: src/comic-simple.h
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/comic-simple.h,v
> retrieving revision 1.4
> diff -u -r1.4 comic-simple.h
> --- src/comic-simple.h  25 Jul 2005 19:03:45 -0000      1.4
> +++ src/comic-simple.h  19 Aug 2005 14:06:45 -0000
> @@ -53,6 +53,7 @@
>  ComicSimple  *comic_simple_new_with_info (const gchar *id,
>                                           const gchar *title,
>                                           const gchar *author,
> +                                         const gchar *language,
>                                           const gchar *main_uri);
>  
>  void   comic_simple_set_title (BuohComic *comic, const gchar
> *title); 

hay un ?ltimo cambio, que es de algo que met? yo: en el m?todo
buoh_properties_dialog_init en la l?nea gtk_container_set_border_width
(GTK_CONTAINER (dialog), 5);

pon 12 en vez de 5 por favor, es para no tener que hacer luego yo un
commit solo para eso. 

Bueno, pues cambia lo que te he dicho y haz commit directamente

Buen trabajo!! ahora a por el siguiente! :-P

Salu2
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Carlos Garcia Campos a.k.a. KaL
   elkalmail yahoo es
   carlosgc gnome org
   http://carlosgc.linups.org
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=             
PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://forge.novell.com/pipermail/buoh-dev/attachments/20050819/01ffb3a0/attachment.pgp


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]