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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <stdio.h>
#define WIDTH 400
#define HEIGHT 640
static void plot_toggled(GtkWidget *caller, gpointer data);
int main(int argc, char **argv) {
GtkWidget *window;
GtkWidget *main_vbox;
GtkWidget *cbuttons_frame;
GtkWidget *cbuttons_hbox;
GtkWidget *separator_maj, *separator_min1, *separator_min2, *separator_min3;
GtkWidget *plots_vbox;
GtkWidget *plot_edges_frame, *plot_exec_speed_frame, *plot_high_freq_frame,
*plot_low_freq_frame;
GtkWidget *plot_edges, *plot_exec_speed, *plot_high_freq, *plot_low_freq;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), WIDTH, HEIGHT);
gtk_window_set_title(GTK_WINDOW(window), "Graph drawing");
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
main_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
cbuttons_frame = gtk_frame_new("Select the plots");
gtk_container_set_border_width(GTK_CONTAINER(cbuttons_frame), 5);
cbuttons_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
GtkWidget *cbutton_edges, *cbutton_exec_speed, *cbutton_high_freq,
*cbutton_low_freq;
cbutton_edges = gtk_check_button_new_with_label("Edges");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbutton_edges), TRUE);
g_signal_connect(cbutton_edges, "toggled", G_CALLBACK(plot_toggled),
&plot_edges_frame);
cbutton_exec_speed = gtk_check_button_new_with_label("Execution Speed");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbutton_exec_speed), TRUE);
g_signal_connect(cbutton_exec_speed, "toggled", G_CALLBACK(plot_toggled),
&plot_exec_speed_frame);
cbutton_high_freq = gtk_check_button_new_with_label("High Frequency");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbutton_high_freq), TRUE);
g_signal_connect(cbutton_high_freq, "toggled", G_CALLBACK(plot_toggled),
&plot_high_freq_frame);
cbutton_low_freq = gtk_check_button_new_with_label("Low Frequency");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbutton_low_freq), TRUE);
g_signal_connect(cbutton_low_freq, "toggled", G_CALLBACK(plot_toggled),
&plot_low_freq_frame);
gtk_box_pack_start(GTK_BOX(cbuttons_hbox), cbutton_edges, TRUE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(cbuttons_hbox), cbutton_exec_speed, TRUE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(cbuttons_hbox), cbutton_high_freq, TRUE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(cbuttons_hbox), cbutton_low_freq, TRUE, TRUE, 1);
gtk_container_add(GTK_CONTAINER(cbuttons_frame), cbuttons_hbox);
gtk_box_pack_start(GTK_BOX(main_vbox), cbuttons_frame, FALSE, TRUE, 1);
separator_maj = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
gtk_box_pack_start(GTK_BOX(main_vbox), separator_maj, FALSE, TRUE, 1);
plots_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
plot_edges_frame = gtk_frame_new("Edges");
gtk_container_set_border_width(GTK_CONTAINER(plot_edges_frame), 5);
plot_edges = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(plot_edges_frame), plot_edges);
plot_exec_speed_frame = gtk_frame_new("Exec Speed");
gtk_container_set_border_width(GTK_CONTAINER(plot_exec_speed_frame), 5);
plot_exec_speed = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(plot_exec_speed_frame), plot_exec_speed);
plot_high_freq_frame = gtk_frame_new("High Frequency");
gtk_container_set_border_width(GTK_CONTAINER(plot_high_freq_frame), 5);
plot_high_freq = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(plot_high_freq_frame), plot_high_freq);
plot_low_freq_frame = gtk_frame_new("Low Frequency");
gtk_container_set_border_width(GTK_CONTAINER(plot_low_freq_frame), 5);
plot_low_freq = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(plot_low_freq_frame), plot_low_freq);
separator_min1 = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
separator_min2 = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
separator_min3 = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
gtk_box_pack_start(GTK_BOX(plots_vbox), plot_edges_frame, TRUE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(plots_vbox), separator_min1, FALSE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(plots_vbox), plot_exec_speed_frame, TRUE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(plots_vbox), separator_min2, FALSE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(plots_vbox), plot_high_freq_frame, TRUE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(plots_vbox), separator_min3, FALSE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(plots_vbox), plot_low_freq_frame, TRUE, TRUE, 1);
gtk_box_pack_start(GTK_BOX(main_vbox), plots_vbox, TRUE, TRUE, 1);
gtk_container_add(GTK_CONTAINER(window), main_vbox);
guint id_edges = gtk_socket_get_id(GTK_SOCKET(plot_edges));
guint id_exec_speed = gtk_socket_get_id(GTK_SOCKET(plot_exec_speed));
guint id_high_freq = gtk_socket_get_id(GTK_SOCKET(plot_high_freq));
guint id_low_freq = gtk_socket_get_id(GTK_SOCKET(plot_low_freq));
printf("%x\n%x\n%x\n%x\n", id_edges, id_exec_speed, id_high_freq,
id_low_freq);
fclose(stdout);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit),
NULL);
gtk_widget_show_all(window);
gtk_main();
return EXIT_SUCCESS;
}
static void plot_toggled(GtkWidget *caller, gpointer data) {
gboolean state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(caller));
GtkWidget *widget = *(GtkWidget **)data;
if (state) {
gtk_widget_show(widget);
} else {
gtk_widget_hide(widget);
}
}
|