pikscedict-info
[Top][All Lists]
Advanced

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

[Pikscedict-info] version windows


From: Stephane Caron
Subject: [Pikscedict-info] version windows
Date: Tue, 24 Jun 2003 22:45:37 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.3) Gecko/20030312

Ci-joint le fichier que j'ai modifié pour avoir un affichage correct des caractères chinois (j'ai choisi la police simsun).
Il me semble avoir tracé toutes les modifs donc ça devrait être clair.

Stéphane
/******fen_recherche.c******
fonctions relative à la partie 
centrale de la fenetre
****************************/

#include "../include/fen_recherche.h"


void ajout_onglet(GtkWidget *button,gpointer *data)
{
  GtkWidget        *vbox, *hbox;
  FenetreRecherche *fen;
  OngletRecherche  *recherche;

  fen = (FenetreRecherche*)data;
  recherche = g_malloc (sizeof (OngletRecherche));
  
  fen->liste_recherches = g_list_append (fen->liste_recherches, recherche);
  
  vbox = gtk_vbox_new (FALSE, 0);
  hbox = gtk_hbox_new (FALSE, 0);
  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
  
  gtk_notebook_append_page (GTK_NOTEBOOK (fen->onglets), vbox, NULL);
  
  creer_frame_criteres  (hbox, recherche);
  creer_frame_selection (hbox, recherche);
  creer_frame_resultat  (vbox, recherche);
  
  gtk_widget_show (recherche->frame_resultat);
  gtk_widget_show (recherche->frame_criteres);
  gtk_widget_show (recherche->frame_selection);
  gtk_widget_show (hbox);
  gtk_widget_show (vbox);
  
  gtk_notebook_set_current_page (GTK_NOTEBOOK (fen->onglets), fen->npage);
  fen->npage++;
}


void efface_onglet(GtkWidget *button, gpointer *data)
{
  FenetreRecherche *onglets   = (FenetreRecherche*)data;
  OngletRecherche  *recherche;

  gint page = gtk_notebook_get_current_page (GTK_NOTEBOOK (onglets->onglets));
  
  if (page >= 0)
    {
      recherche = (OngletRecherche*)g_list_nth_data 
((onglets->liste_recherches), page);
      
      gtk_tree_store_clear (GTK_TREE_STORE (recherche->result_store));  
      onglets->liste_recherches = g_list_remove (onglets->liste_recherches, 
recherche);
      gtk_notebook_remove_page (GTK_NOTEBOOK (onglets->onglets), page); 
      
      onglets->npage--; 
      g_free (recherche);
    }
}


//*********************

void creer_frame_criteres (GtkWidget *box, OngletRecherche *rech)
{
  GtkWidget *button;
  GtkWidget *hbox, *vbox;
  GtkWidget *label;

  rech->frame_criteres = gtk_frame_new (" Criteres ");
        
  vbox = gtk_vbox_new (TRUE, 4);
        
        
  gtk_container_add (GTK_CONTAINER (rech->frame_criteres), vbox);
  gtk_widget_show (vbox);
        
  hbox = gtk_hbox_new (FALSE, 5);
  gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 1);
        
        
  label = gtk_label_new("Chinois :");
  rech->chinois = gtk_entry_new();
  /* Debut Steph */
  gtk_widget_modify_font (rech->chinois, pango_font_description_from_string 
("simsun"));
  /* Fin steph */
  //button = gtk_button_new_with_label("rechercher");
  gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,4);
  gtk_box_pack_start(GTK_BOX(hbox),rech->chinois,FALSE,TRUE,4);
  //gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,TRUE,4);
  gtk_widget_show(label);
  gtk_widget_show(rech->chinois);
  //gtk_widget_show(button);
  gtk_widget_show(hbox);

  hbox = gtk_hbox_new(FALSE,5);
  gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0);
        
  label = gtk_label_new("Anglais :");
  rech->anglais = gtk_entry_new();
  //button = gtk_button_new_with_label("rechercher");
  gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,4);
  gtk_box_pack_start(GTK_BOX(hbox),rech->anglais,FALSE,TRUE,4);
  //gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,TRUE,4);
  gtk_widget_show(label);
  gtk_widget_show(rech->anglais);
  //gtk_widget_show(button);
  gtk_widget_show(hbox);

  hbox = gtk_hbox_new(FALSE,5);
  gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0);
        
  label = gtk_label_new("Pinyin :");
  rech->pinyin = gtk_entry_new();
  button = gtk_button_new_with_label("Rechercher");
  gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,4);
  gtk_box_pack_start(GTK_BOX(hbox),rech->pinyin,FALSE,TRUE,4);
  gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,TRUE,4);
  gtk_widget_show(label);
  gtk_widget_show(rech->pinyin);
  gtk_widget_show(button);
  gtk_widget_show(hbox);
  //capter les signaux
  g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(cherche),rech);
  //enpacketer le tout
  gtk_box_pack_start(GTK_BOX(box),rech->frame_criteres,FALSE,TRUE,4);

}

void creer_frame_selection(GtkWidget *box,OngletRecherche *rech)
{
  GtkWidget *view,*scroll;
        
  scroll = gtk_scrolled_window_new(NULL,NULL);
        
  view = gtk_text_view_new ();
  /* Debut steph */
  gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
  /* Fin steph */
  rech->selection = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll),view);
  rech->frame_selection = gtk_frame_new(" Selection ");
        
  gtk_container_add(GTK_CONTAINER(rech->frame_selection),scroll);
  gtk_widget_show(view);
  gtk_widget_show(scroll);
  gtk_box_pack_start(GTK_BOX(box),rech->frame_selection,TRUE,TRUE,4);

}


void creer_frame_resultat(GtkWidget *box,OngletRecherche *rech)
{
  GtkWidget *hbox;
  GtkWidget *scrolled_window;


  GtkTreeSelection *select;
  GtkCellRenderer *cell;
  GtkTreeViewColumn *column;
        
  rech->result_store = 
gtk_tree_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);         

        
  rech->result_view = 
gtk_tree_view_new_with_model(GTK_TREE_MODEL(rech->result_store));
  /* Debut Steph */
  gtk_widget_modify_font (rech->result_view, pango_font_description_from_string 
("simsun"));
  /* Fin steph */
        
        
  cell = gtk_cell_renderer_text_new();
  column = 
gtk_tree_view_column_new_with_attributes("Chinois",cell,"text",COL_CHINOIS,NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(rech->result_view),column);
  column = gtk_tree_view_column_new_with_attributes("Pin 
Yin",cell,"text",COL_PINYIN,NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(rech->result_view),column);
  column = 
gtk_tree_view_column_new_with_attributes("Anglais",cell,"text",COL_ANGLAIS,NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(rech->result_view),column);
        
  gtk_tree_view_set_expander_column(GTK_TREE_VIEW(rech->result_view),column);

  select = gtk_tree_view_get_selection (GTK_TREE_VIEW (rech->result_view));
  gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
  g_signal_connect (G_OBJECT (select), "changed",G_CALLBACK 
(select_result),rech);
        
  hbox = gtk_hbox_new(FALSE,10);
  rech->frame_resultat = gtk_frame_new(" Resultats ");
        
        
        
        
  gtk_container_add(GTK_CONTAINER(rech->frame_resultat),hbox);
  gtk_widget_show(hbox);
        
  scrolled_window = gtk_scrolled_window_new(NULL,NULL);
        
  gtk_box_pack_start(GTK_BOX(hbox),scrolled_window,TRUE,TRUE,5);
  gtk_container_add(GTK_CONTAINER(scrolled_window),rech->result_view);

                
  gtk_widget_show(scrolled_window);
        
  gtk_widget_show(rech->result_view);

  gtk_box_pack_start(GTK_BOX(box),rech->frame_resultat,TRUE,TRUE,4);
        
  gtk_widget_set_sensitive(rech->frame_resultat,FALSE);

}




void cherche(GtkWidget *button,gpointer *data)
{
  OngletRecherche *rech = (OngletRecherche*)data;
  GList *result;
  gchar **def=NULL,*def_debut,*def_fin;
  gint ndef,n;
  GtkTreeIter iter,parent;
  CedictEntry *entry,*rech_entry;
  gtk_tree_store_clear(GTK_TREE_STORE(rech->result_store));     
  rech_entry = g_malloc(sizeof(CedictEntry));
  rech_entry->chinese = g_strdup(gtk_entry_get_text(GTK_ENTRY(rech->chinois)));
  rech_entry->pinyin = g_strdup(gtk_entry_get_text(GTK_ENTRY(rech->pinyin)));
  rech_entry->english = g_strdup(gtk_entry_get_text(GTK_ENTRY(rech->anglais)));
  //printf("debut de la recherche\n");
  result = voc;
  while((result = 
g_list_find_custom((GList*)result,(gconstpointer*)rech_entry,(GCompareFunc)cedict_compare))
 !=NULL)
    {
      //n++;
      //printf("n = %d\n",n);
      entry = result->data;
                
      ndef=0;
      def_debut = entry->english+1;
                
      while((def_debut = g_utf8_strchr((gchar*)(def_debut)+1,-1,'/'))!=NULL)
        ndef++;
      def = g_malloc((sizeof(gpointer))*(ndef));
      def_fin = g_utf8_strchr((gchar*)(entry->english + 2),-1,'/');
      def[0] = g_strndup (entry->english+2,((def_fin-1) - (entry->english+1)));
                
      gtk_tree_store_append(GTK_TREE_STORE(rech->result_store),&parent,NULL);
      
gtk_tree_store_set(GTK_TREE_STORE(rech->result_store),&parent,COL_CHINOIS,entry->chinese,COL_PINYIN,entry->pinyin,COL_ANGLAIS,def[0],-1);
                        
      for(n=1;n<ndef;n++)
        {
          def_debut=def_fin+1;
          def_fin=g_utf8_strchr(def_debut,-1,'/');
          if(def_fin)
            def[n] = g_strndup(def_debut,((def_fin) - def_debut));
          
gtk_tree_store_append(GTK_TREE_STORE(rech->result_store),&iter,&parent);
          
gtk_tree_store_set(GTK_TREE_STORE(rech->result_store),&iter,COL_ANGLAIS,def[n],-1);
                        
        }
                
                
                
      result = result->next;
    }
  //printf("fin de la recherche\n");
  gtk_tree_view_expand_all(GTK_TREE_VIEW(rech->result_view));   
  //gtk_widget_set_sensitive(rech->frame_criteres,FALSE);
  gtk_widget_set_sensitive(rech->frame_resultat,TRUE);

}

void select_result(GtkTreeSelection *selection, gpointer data)
{
  GtkTreeIter iter,parent;
  GtkTreeModel *model;
  OngletRecherche *rech=data;
  GtkTextIter start,end;
  GtkTextTag *tag;
  PangoFontDescription *font_desc;
  int n=1;
  gchar *chinois;
  gchar *anglais;
  gchar *pinyin;
  gchar *tmp;


  if (gtk_tree_selection_get_selected (selection, &model, &iter))
    {
      /*efface le buffer*/
      gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(rech->selection),&start);
      gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(rech->selection),&end);
      
gtk_text_buffer_remove_all_tags(GTK_TEXT_BUFFER(rech->selection),&start,&end); 
      gtk_text_buffer_delete(GTK_TEXT_BUFFER(rech->selection),&start,&end); 
                        
                        
      if(gtk_tree_model_iter_parent(model,&parent,&iter))
        iter = parent;
      else
        parent = iter;
      gtk_tree_model_get (model, &iter, COL_CHINOIS, 
&chinois,COL_ANGLAIS,&anglais,COL_PINYIN,&pinyin,-1);
                        
      font_desc = pango_font_description_from_string ("simsun 24");
      tag = 
gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(rech->selection),NULL,"font-desc",font_desc,NULL);
      
gtk_text_buffer_insert_with_tags(GTK_TEXT_BUFFER(rech->selection),&end,chinois,-1,tag,NULL);
      pango_font_description_free (font_desc);                  
                        
      tmp = g_strdup_printf("\n%s : ",pinyin);
      font_desc = pango_font_description_from_string ("i 16");
      tag = 
gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(rech->selection),NULL,"font-desc",font_desc,NULL);
      
gtk_text_buffer_insert_with_tags(GTK_TEXT_BUFFER(rech->selection),&end,tmp,-1,tag,NULL);
  
      pango_font_description_free (font_desc);
      g_free(tmp);
                        
      tmp = g_strdup_printf("%d. %s\n",n,anglais);
      gtk_text_buffer_insert(GTK_TEXT_BUFFER(rech->selection),&end,tmp,-1);
      g_free(tmp);
                        
      g_free (chinois);
      g_free (anglais);
      g_free (pinyin);
                        
      if(gtk_tree_model_iter_children(model,&iter,&parent))
        {
          do
            {
              n++;
              gtk_tree_model_get (model, &iter,COL_ANGLAIS,&anglais,-1);
              tmp = g_strdup_printf("%d. %s\n",n,anglais);
              
gtk_text_buffer_insert(GTK_TEXT_BUFFER(rech->selection),&end,tmp,-1);
              g_free(tmp);
              g_free (anglais);
            }while(gtk_tree_model_iter_next(model,&iter));
        }
        
        
    }
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]