[Top][All Lists]
[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));
}
}
}