2 #include <gdk/gdkkeysyms.h>
8 #include "../src/opticalflow.h"
13 static GtkWidget *flow_dialog = NULL;
14 static GtkWidget *enable_button;
15 static GtkObject *window_adj;
16 static GtkObject *vector_adj;
17 static GtkObject *uv_adj;
19 static void flow_destroy(GtkWidget *widget, gpointer priv)
21 gtk_widget_destroy(flow_dialog);
25 static gboolean flow_key_press(GtkWidget *widget, GdkEventKey *event, gpointer priv)
27 switch (event->keyval) {
30 if (event->state & GDK_CONTROL_MASK) {
31 gtk_widget_destroy(widget);
35 ;//printf("%x\n", event->keyval);
41 static void close_event(gpointer *priv)
43 gtk_widget_destroy(flow_dialog);
47 static void reset_event(gpointer *priv)
49 anything_modified = 1;
52 gtk_adjustment_set_value(GTK_ADJUSTMENT(window_adj), flow_window);
53 gtk_adjustment_set_value(GTK_ADJUSTMENT(vector_adj), flow_view_vector);
54 gtk_adjustment_set_value(GTK_ADJUSTMENT(uv_adj), flow_view_uv);
56 timeline_select_and_save(timeline_selected, timeline_selected);
57 // draw_image(0, 0, -1, -1);
60 static void apply_event(gpointer *priv)
62 anything_modified = 1;
64 flow_enable = GTK_TOGGLE_BUTTON(enable_button)->active;
65 flow_window = GTK_ADJUSTMENT(window_adj)->value;
66 flow_view_vector = GTK_ADJUSTMENT(vector_adj)->value;
67 flow_view_uv = GTK_ADJUSTMENT(uv_adj)->value;
69 timeline_select_and_save(timeline_selected, timeline_selected);
70 // draw_image(0, 0, -1, -1);
73 static GtkWidget *xpm_label_box( const gchar *stock_id,
80 /* Create box for image and label */
81 box = gtk_hbox_new (FALSE, 0);
82 gtk_container_set_border_width (GTK_CONTAINER (box), 4);
84 /* Now on to the image stuff */
85 image = gtk_image_new_from_stock(stock_id, -1);
87 /* Create a label for the button */
88 label = gtk_label_new (label_text);
90 /* Pack the image and label into the box */
91 gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 3);
92 gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 3);
94 gtk_widget_show (image);
95 gtk_widget_show (label);
100 void flow_event(gpointer priv)
102 GtkWidget *vbox, *hbox;
104 GtkWidget *root_menu;
106 GtkWidget *menu_item;
107 GtkWidget *enable_label;
108 GtkWidget *window_label;
109 GtkWidget *window_scroll;
110 GtkWidget *vector_label;
111 GtkWidget *vector_scroll;
113 GtkWidget *uv_scroll;
114 GtkWidget *button_apply;
115 GtkWidget *button_reset;
119 gtk_widget_destroy(flow_dialog);
124 if (timeline_frames <= 1)
128 flow_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
129 gtk_window_set_default_size(GTK_WINDOW(flow_dialog), 300, 0);
130 gtk_window_set_title(GTK_WINDOW(flow_dialog), "Optical Flow");
131 g_signal_connect(flow_dialog, "destroy", G_CALLBACK(flow_destroy), flow_dialog);
132 g_signal_connect(flow_dialog, "key_press_event", G_CALLBACK(flow_key_press), flow_dialog);
135 menu_bar = gtk_menu_bar_new();
136 gtk_widget_show(menu_bar);
137 menu = gtk_menu_new();
138 root_menu = gtk_menu_item_new_with_mnemonic("_File");
139 gtk_widget_show(root_menu);
141 menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLOSE, NULL);
142 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
143 g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(close_event), flow_dialog);
144 gtk_widget_show(menu_item);
145 gtk_menu_item_set_submenu(GTK_MENU_ITEM(root_menu), menu);
146 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), root_menu);
148 /* create sflow widgets */
149 enable_label = gtk_label_new("Enable:");
150 gtk_widget_show(GTK_WIDGET(enable_label));
151 enable_button = gtk_check_button_new();
152 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enable_button), flow_enable ? TRUE : FALSE);
153 // g_signal_connect(enable_button, "toggled", G_CALLBACK(enable_event), NULL);
154 gtk_widget_show(enable_button);
156 window_label = gtk_label_new("Search Window:");
157 gtk_widget_show(GTK_WIDGET(window_label));
158 window_adj = gtk_adjustment_new(flow_window, 3, 61, 1, 1, 1);
159 window_scroll = gtk_hscale_new(GTK_ADJUSTMENT(window_adj));
160 gtk_widget_show(window_scroll);
162 vector_label = gtk_label_new("Display vectors (1=disable):");
163 gtk_widget_show(GTK_WIDGET(vector_label));
164 vector_adj = gtk_adjustment_new(flow_view_vector, 1, 51, 1, 1, 1);
165 vector_scroll = gtk_hscale_new(GTK_ADJUSTMENT(vector_adj));
166 gtk_widget_show(vector_scroll);
168 uv_label = gtk_label_new("Display next as UV (0=disable):");
169 gtk_widget_show(GTK_WIDGET(uv_label));
170 uv_adj = gtk_adjustment_new(flow_view_uv, 0, 101, 1, 1, 1);
171 uv_scroll = gtk_hscale_new(GTK_ADJUSTMENT(uv_adj));
172 gtk_widget_show(uv_scroll);
175 button_reset = gtk_button_new();
176 g_signal_connect(button_reset, "clicked", G_CALLBACK(reset_event), NULL);
177 box = xpm_label_box (GTK_STOCK_REMOVE, "Reset");
178 gtk_widget_show (box);
179 gtk_container_add (GTK_CONTAINER (button_reset), box);
180 gtk_widget_show(button_reset);
182 button_apply = gtk_button_new();
183 g_signal_connect(button_apply, "clicked", G_CALLBACK(apply_event), NULL);
184 box = xpm_label_box (GTK_STOCK_APPLY, "Apply");
185 gtk_widget_show (box);
186 gtk_container_add (GTK_CONTAINER (button_apply), box);
187 gtk_widget_show(button_apply);
189 hbox = gtk_hbox_new(FALSE, 0);
190 gtk_box_pack_end(GTK_BOX(hbox), button_apply, FALSE, FALSE, 2);
191 gtk_box_pack_end(GTK_BOX(hbox), button_reset, FALSE, FALSE, 2);
192 gtk_widget_show(hbox);
194 /* create vbox (complete window) */
195 vbox = gtk_vbox_new(FALSE, 0);
196 gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 2);
197 gtk_box_pack_start(GTK_BOX(vbox), enable_label, FALSE, FALSE, 2);
198 gtk_box_pack_start(GTK_BOX(vbox), enable_button, FALSE, FALSE, 2);
199 gtk_box_pack_start(GTK_BOX(vbox), window_label, FALSE, FALSE, 2);
200 gtk_box_pack_start(GTK_BOX(vbox), window_scroll, FALSE, FALSE, 2);
201 gtk_box_pack_start(GTK_BOX(vbox), vector_label, FALSE, FALSE, 2);
202 gtk_box_pack_start(GTK_BOX(vbox), vector_scroll, FALSE, FALSE, 2);
203 gtk_box_pack_start(GTK_BOX(vbox), uv_label, FALSE, FALSE, 2);
204 gtk_box_pack_start(GTK_BOX(vbox), uv_scroll, FALSE, FALSE, 2);
205 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 20);
206 gtk_widget_show(vbox);
208 gtk_container_add(GTK_CONTAINER(flow_dialog), vbox);
209 gtk_widget_show(flow_dialog);