IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

récupération pagination gtk_text_buffer


Sujet :

GTK+ avec C & C++

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 175
    Par défaut récupération pagination gtk_text_buffer
    Je relance mon post de l'autre jour en essayant d'être plus clair

    J'ai crée un gtk_text_buffer contenant du texte enrichi (présence de caractère gras par exemple)

    J'ai crée ceux-ci avec des gtk_text_tags

    Je récupère le texte brut sans prob.

    Y a t'il un moyen de récupérer le texte avec sa "pagination" afin de le sauvegarder ? ( format xml, format spécifique à gtk, enfin ce que gtk me permet de faire )
    J'ai essayé avec gtk_text_buffer_get_slice.

    qu'est ce la valeur booléenne include_hidden_chars signifie ? que sont les "caractères invisible" ? les tags de passage en gras ou en italique par exemple sont ils ce type de caractères invisibles. A savoir que je récupère la chaine dans un buffer en gchar ( donc en char je présumes ). La doc dit que la chaine retournée est en UTF-8 donc j'ai peut être mes tags retournés mais éliminés car char contient des codes ASCII, ça me parait pas être ça car je devrais dans ce cas avoir les codesASCIIc orrespondant aux codes UTF-8

    Par ailleurs, la pagination ne serait plutôt pas stocké dans le gtk_text_view, et même punition, comment la sauvegarder cette pagination ?

    Merci.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 175
    Par défaut Alternative envisagée
    Suite à mon prob de sauvegarde de pagination de gtk_text_buffer, j'envisages de contourner mon prob en mettant mon texte dans un label ( cré via gtk_label_new) celui-ci me parait pratique car je peux utiliser des balises ressemblant à l'html ( <b>, <u>, etc .. )
    Par contre je perds la possibilité de changer le texte en temps réel.

    pour le gtk_text_buffer, je pense qu'il ne contient pas la pagination.


    Je tourne en rond ...

    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 175
    Par défaut je pense que j'ai trouvé
    J'ai la solution je pense.

    avec les fonctions gtk_text_buffer_serialize_tagset et serialize

    Approfondi et je détailles. En tout cas ça marche reste à affiner
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 175
    Par défaut pour sauvegarde texte avec pagination
    le texte à sauvegarder :

    abcd. stocké dans un gtk_text_buffer

    ( le c du texte est en caractère gras )

    le carcatère gras a été mis via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gtk_text_buffer_create_tag(buffer,"b","weight",PANGO_WEIGHT_BOLD,NULL);
    gtk_text_buffer_apply_tab_by_name(buffer,"b",&start_iter,&end_iter);
    Le caractère "c" ayant été selectionné par gtk_text_buffer_get_selection_bounds

    Pour la sauvegarde du texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    GdkAtom se_format;
    GtkTextIter start_iter,end_iter;
    FILE *fichier;
    gsize lenght;
    guint8 *data;
     
    fichier=fopen("test.txt","wb");
    gtk_text_buffer_get_bounds(buffer,&start_iter,&end_iter);
    se_format=gtk_text_buffer_register_serialize_tagset(buffer,"default");
    data=gtk_text_buffer_serialize(buffer,buffer,se_format,&start_iter,&end_iter,&length);
    fwrite(&length,sizeof(gsize),1,fichier);
    fwrite(data,sizeof(guint8),length,fichier);
    fclose(fichier);
    free(data);
    Voici le résultat de fichier texte ( hexadécimal et texte : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    00000000   E2 00 00 00  47 54 4B 54  45 58 54 42  55 46 46 45  ....GTKTEXTBUFFE
    00000010   52 43 4F 4E  54 45 4E 54  53 2D 30 30  30 31 00 00  RCONTENTS-0001..
    00000020   00 C4 20 3C  74 65 78 74  5F 76 69 65  77 5F 6D 61  .. <text_view_ma
    00000030   72 6B 75 70  3E 0A 20 3C  74 61 67 73  3E 0A 20 20  rkup>. <tags>.
    00000040   3C 74 61 67  20 6E 61 6D  65 3D 22 62  22 20 70 72  <tag name="b" pr
    00000050   69 6F 72 69  74 79 3D 22  30 22 3E 0A  20 20 20 3C  iority="0">.   <
    00000060   61 74 74 72  20 6E 61 6D  65 3D 22 77  65 69 67 68  attr name="weigh
    00000070   74 22 20 74  79 70 65 3D  22 67 69 6E  74 22 20 76  t" type="gint" v
    00000080   61 6C 75 65  3D 22 37 30  30 22 20 2F  3E 0A 20 20  alue="700" />.
    00000090   3C 2F 74 61  67 3E 0A 20  3C 2F 74 61  67 73 3E 0A  </tag>. </tags>.
    000000A0   3C 74 65 78  74 3E 61 62  3C 61 70 70  6C 79 5F 74  <text>ab<apply_t
    000000B0   61 67 20 6E  61 6D 65 3D  22 62 22 3E  63 3C 2F 61  ag name="b">c</a
    000000C0   70 70 6C 79  5F 74 61 67  3E 64 3C 2F  74 65 78 74  pply_tag>d</text
    000000D0   3E 0A 3C 2F  74 65 78 74  5F 76 69 65  77 5F 6D 61  >.</text_view_ma
    000000E0   72 6B 75 70  3E 0A                                  rkup>.
    000000F0
    00000100
    00000110
    00000120
    00000130
    ---  test.txt       --0x0/0xE6-------------------------------------------------
    Pour le moment je n'arrives pas à le restaurer correctement
    code pour la tentative de rechargement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fread(&length,sizeof(gsize),1,fichier);
    data=malloc(sizeof(guint8)*length);
    fread(data,sizeof(guint8),length,fichier);
    se_format=gtk_text_buffer_register_deserialize_tagset(buffer,"default");
    gtk_text_buffer_get_iter_at_offset(buffer,&start_iter,0);
    gtk_text_buffer_deserialize(buffer,buffer,se_format,&start_iter,length,NULL);
    free(data);
    Le texte ne s'affiche pas j'ai un msg erreur assertion dans la console, je dois mal utiliser gtk_text_buffer_deserialize_tagset.

    Je continue ma progresssion ...
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 175
    Par défaut Solution pour charger
    Voici le code permettant le chargement du fichier precedement sauvegardé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    FILE *fichier;
    gsize length;
    guint8 *data;
    GdkAtom de_format
    GtkWidget buffer;
    GtkTextIter start_iter;
     
    fichier=fopen("test.dat",rb);
    fread(&length,sizeof(gsize),1,fichier);
    data=malloc(sizeof(gunit8)*length);
    fclose(fichier);
    buffer=gtk_text_view_get_buffer(TK_TEXT_VIEW(text_view));
    gtk_text_buffer_get_iter_at_offset(buffer,&start_iter,0);
    de_format=gtk_text_buffer_register_deserialize_tagset(buffer,"default");
    gtk_text_buffer_deserialize_set_can_create_tags(buffer,de_format,TRUE);
    gtk_text_buffer_deserialize(buffer,buffer,de_format,&start_iter,data,length,NULL);
    text_view ayant été crée via gtk_text_view_new placée dans une fenêtre
    ne fonctionne pas si gtk_text_buffer_deserialize_set_can_create_tags n'est pas utilisé

    N'hesitez pas à me laisser vos commentaires. Notamment Liberforce qui n'arrête pas de me faire des critiques ... mais très constructives, et pertinentes ( spéciale dédicace, encore Merci Liberforce pour ton aide, et tes explications quand je comprends de travers )
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupération avancée contenu gtk_text_buffer
    Par Christophe dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 03/10/2011, 10h07
  2. Réponses: 2
    Dernier message: 07/05/2010, 10h30
  3. Réponses: 8
    Dernier message: 02/11/2007, 14h51
  4. Réponses: 11
    Dernier message: 10/02/2006, 15h44
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo