1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| #include <gtk/gtk.h>
GtkTextBuffer *t;
/* =============================================================================
Cherche et met en couleur UNE expression
==============================================================================*/
gboolean find (GtkTextBuffer *TextBuffer, const gchar *text, GtkTextTag *tag, GtkTextIter *iter)
{
GtkTextIter mstart, mend;
gboolean found;
GtkTextMark *last_pos;
found = gtk_text_iter_forward_search (iter, text, 0, &mstart, &mend, NULL);
if (found)
{
gtk_text_buffer_apply_tag(TextBuffer, tag, &mstart, &mend);
*iter = mend;
return TRUE;
}
return FALSE;
}
/* =============================================================================
Cherche et met en couleur une expression dans un GtkTextBuffer
==============================================================================*/
void highlight(GtkTextBuffer *TextBuffer, gchar *searchtext)
{
GtkTextIter iter;
GtkTextTag *tag;
gboolean found = TRUE;
//tag = gtk_text_buffer_create_tag(TextBuffer, NULL, "foreground", "blue", NULL);
tag = gtk_text_buffer_create_tag(TextBuffer, NULL,
"foreground", "blue",
"size", 12 * PANGO_SCALE,
NULL);
gtk_text_buffer_get_start_iter (TextBuffer, &iter);
while (found)
found = find (t, searchtext, tag, &iter);
}
/*==============================================================================
Presser Entrée pour rechercher le texte saisi
=============================================================================*/
static void Txt_Validate(GtkWidget *w, GtkWidget *entry)
{
gchar *text = (gchar*)gtk_entry_get_text (GTK_ENTRY(entry));
highlight(t, text);
gfree(text);
gtk_entry_set_text (GTK_ENTRY(entry),"");
}
/* =============================================================================
* Point d' entrée
==============================================================================*/
int main(int argc, char **argv)
{
GtkWidget *fen, *vbox, *TextView, *Txt;
GdkColor color;
gtk_init(&argc, &argv);
fen = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(fen), 400, 200);
gtk_window_set_position (GTK_WINDOW(fen), GTK_WIN_POS_CENTER_ALWAYS);
g_signal_connect(G_OBJECT(fen), "destroy", G_CALLBACK(gtk_main_quit), NULL);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (fen), vbox);
TextView = gtk_text_view_new();
t = gtk_text_view_get_buffer (GTK_TEXT_VIEW (TextView));
gtk_box_pack_start (GTK_BOX (vbox), TextView, TRUE, TRUE, 0);
GtkTextIter i;
gtk_text_buffer_get_start_iter(t, &i);
gtk_text_buffer_insert (t, &i, "Bon ok\r\nDu texte, du texte...\r\nUn essai,"
"\r\nUn autre essai...Ok je vais me cacher bye les amins.", -1);
Txt = gtk_entry_new ();
gtk_entry_set_max_length (GTK_ENTRY (Txt), 255);
gdk_color_parse ("#98CB60", &color);
gtk_widget_modify_base (TextView, GTK_STATE_NORMAL, &color);
gtk_entry_set_text(GTK_ENTRY (Txt), "essai");
g_signal_connect (G_OBJECT(Txt), "activate",
G_CALLBACK(Txt_Validate),(gpointer)Txt);
gtk_box_pack_start (GTK_BOX (vbox), Txt, FALSE, TRUE, 0);
gtk_widget_show_all(fen);
gtk_main();
return 0;
} |