1 #include <gtk/gtk.h>
2 #include <libgd/gd-tagged-entry.h>
3 
4 static GdTaggedEntryTag *toggle_tag;
5 
6 static void
on_tag_clicked(GdTaggedEntry * entry,GdTaggedEntryTag * tag,gpointer useless)7 on_tag_clicked (GdTaggedEntry *entry,
8                 GdTaggedEntryTag *tag,
9                 gpointer useless)
10 {
11   g_print ("tag clicked: %s\n", gd_tagged_entry_tag_get_label (tag));
12 }
13 
14 static void
on_tag_button_clicked(GdTaggedEntry * entry,GdTaggedEntryTag * tag,gpointer useless)15 on_tag_button_clicked (GdTaggedEntry *entry,
16                        GdTaggedEntryTag *tag,
17                        gpointer useless)
18 {
19   g_print ("tag button clicked: %s\n", gd_tagged_entry_tag_get_label (tag));
20 }
21 
22 static void
on_toggle_visible(GtkButton * button,GtkWidget * entry)23 on_toggle_visible (GtkButton *button,
24                    GtkWidget *entry)
25 {
26   gboolean active;
27 
28   active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
29 
30   g_print ("%s tagged entry\n", active ? "show" : "hide");
31   gtk_widget_set_visible (entry, active);
32 }
33 
34 static void
on_toggle_tag(GtkButton * button,GdTaggedEntry * entry)35 on_toggle_tag (GtkButton *button,
36                GdTaggedEntry *entry)
37 {
38   gboolean active;
39 
40   active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
41 
42   if (active)
43     {
44       g_print ("adding tag 'Toggle Tag'\n");
45       gd_tagged_entry_insert_tag (entry, toggle_tag, 0);
46     }
47   else
48     {
49       g_print ("removing tag 'Toggle Tag'\n");
50       gd_tagged_entry_remove_tag (entry, toggle_tag);
51     }
52 }
53 
54 gint
main(gint argc,gchar ** argv)55 main (gint argc,
56       gchar ** argv)
57 {
58   GtkWidget *window, *box, *entry, *toggle_visible_button, *toggle_tag_button;
59   GdTaggedEntryTag *tag;
60 
61   gtk_init (&argc, &argv);
62 
63   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
64   gtk_widget_set_size_request (window, 300, 0);
65 
66   box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
67   gtk_container_add (GTK_CONTAINER (window), box);
68 
69   entry = GTK_WIDGET (gd_tagged_entry_new ());
70   g_signal_connect(entry, "tag-clicked",
71                    G_CALLBACK (on_tag_clicked), NULL);
72   g_signal_connect(entry, "tag-button-clicked",
73                    G_CALLBACK (on_tag_button_clicked), NULL);
74   gtk_container_add (GTK_CONTAINER (box), entry);
75 
76   tag = gd_tagged_entry_tag_new ("Blah1");
77   gd_tagged_entry_add_tag (GD_TAGGED_ENTRY (entry), tag);
78   g_object_unref (tag);
79 
80   tag = gd_tagged_entry_tag_new ("Blah2");
81   gd_tagged_entry_tag_set_has_close_button (tag, FALSE);
82   gd_tagged_entry_insert_tag (GD_TAGGED_ENTRY (entry), tag, -1);
83   g_object_unref (tag);
84 
85   tag = gd_tagged_entry_tag_new ("Blah3");
86   gd_tagged_entry_tag_set_has_close_button (tag, FALSE);
87   gd_tagged_entry_insert_tag (GD_TAGGED_ENTRY (entry), tag, 0);
88   g_object_unref (tag);
89 
90   toggle_visible_button = gtk_toggle_button_new_with_label ("Visible");
91   gtk_widget_set_vexpand (toggle_visible_button, TRUE);
92   gtk_widget_set_valign (toggle_visible_button, GTK_ALIGN_END);
93   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle_visible_button), TRUE);
94   g_signal_connect (toggle_visible_button, "toggled",
95                     G_CALLBACK (on_toggle_visible), entry);
96   gtk_container_add (GTK_CONTAINER (box), toggle_visible_button);
97 
98   toggle_tag = gd_tagged_entry_tag_new ("Toggle Tag");
99 
100   toggle_tag_button = gtk_toggle_button_new_with_label ("Toggle Tag");
101   g_signal_connect (toggle_tag_button, "toggled",
102                     G_CALLBACK (on_toggle_tag), entry);
103   gtk_container_add (GTK_CONTAINER (box), toggle_tag_button);
104 
105   gtk_widget_show_all (window);
106   gtk_main ();
107 
108   gtk_widget_destroy (window);
109 
110   return 0;
111 }
112