buttons/b_zoomin.c buttons/b_zoomout.c \
buttons/b_highlight.c buttons/b_eye.c buttons/b_pal.c buttons/b_col.c \
buttons/b_bc.c buttons/b_preview.c buttons/b_flow.c buttons/b_fill.c \
+ menu.c \
main.c
if ENABLE_OPENCV
colorize_gtk_SOURCES += \
#include "../src/opticalflow.h"
#endif
#include "main.h"
+#include "menu.h"
#include "image.h"
#include "palette.h"
#include "timeline.h"
#define min(x,y) ((x < y) ? x : y)
#define abs(x,y) ((x < y) ? y - x : x - y)
-/* the labels are used to identify menu and button items */
-enum toggle_label {
- TOGGLE_LABEL_NONE = 0,
- TOGGLE_LABEL_HIGHLIGHT,
- TOGGLE_LABEL_PREVIEW,
- TOGGLE_LABEL_RENDERED,
- TOGGLE_LABEL_FLOWVIEW,
- TOGGLE_LABEL_ZOOMFIELDS,
-};
-
-static void set_button_toggel_by_label(enum toggle_label label, gboolean active);
-
/* error requester */
void printerror(const char *fmt, ...)
{
* keypress
*/
-static void undo_event(gpointer priv);
-static void redo_event(gpointer priv);
-static void copy_event(gpointer priv);
-static void paste_event(gpointer priv);
-
/* event handler for main window keys */
static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
* colorselection
*/
-/* color selection's buttons have been pressed */
GtkWidget *colorseldlg = NULL;
GtkColorSelection *colorsel;
-static void color_response(GtkDialog *dialog, gint response_id, gpointer user_data)
+/* color selection's buttons have been pressed */
+void color_response(GtkDialog *dialog, gint response_id, gpointer user_data)
{
GdkColor ncolor;
}
/*
- * menus
- */
-
-static void open_event(gpointer priv)
-{
- GtkWidget *dialog;
- char *filename = NULL;
-
- if (anything_modified) {
- int ret;
- GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(main_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK_CANCEL,
- "Image has been changed, really open new image?");
- ret = gtk_dialog_run(GTK_DIALOG (dialog));
- gtk_widget_destroy(dialog);
- if (ret != GTK_RESPONSE_OK)
- return;
- }
-
- dialog = gtk_file_chooser_dialog_new("Select first grey image",
- GTK_WINDOW(main_window),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
-
- if (frame_list)
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), frame_list[timeline_selected].filename);
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- filename = strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
- }
-
- gtk_widget_destroy(dialog);
-
- if (filename) {
-// do not save timeline_select_and_save(timeline_selected, timeline_selected);
-
- create_timeline(filename);
- if (frame_list)
- create_image(frame_list[timeline_selected].filename, 1);
- free(filename);
- }
-
-}
-
-static void save_event(gpointer priv)
-{
- timeline_select_and_save(timeline_selected, timeline_selected);
-}
-
-static void exit_event(gpointer priv)
-{
- main_destroy();
-}
-
-static void color_changed(GtkWidget *widget, GtkColorSelection *colorsel)
-{
-}
-
-static void undo_event(gpointer priv)
-{
- copy_undo_to_mark(0);
- draw_image(0, 0, -1, -1);
-}
-
-static void redo_event(gpointer priv)
-{
- copy_undo_to_mark(1);
- draw_image(0, 0, -1, -1);
-}
-
-static void copy_event(gpointer priv)
-{
- copy_color(mark_selected + 1);
-}
-
-static void copy_all_event(gpointer priv)
-{
- copy_color(0);
-}
-
-static void paste_event(gpointer priv)
-{
- copy_mark_to_undo();
- paste_color();
- draw_image(0, 0, -1, -1);
-}
-
-static void color_destroy(GtkWidget *widget, gpointer data)
-{
- colorseldlg = NULL;
-}
-
-static void palette_event(gpointer priv)
-{
- GdkColor color;
-
- if (colorseldlg) {
- gtk_widget_destroy(colorseldlg);
- colorseldlg = NULL;
- return;
- }
-
- color.red = mark_palette[mark_selected].r * 256 + 128;
- color.green = mark_palette[mark_selected].g * 256 + 128;
- color.blue = mark_palette[mark_selected].b * 256 + 128;
-
- colorseldlg = gtk_color_selection_dialog_new("Select Color");
- colorsel = GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (colorseldlg)->colorsel);
- gtk_color_selection_set_previous_color (colorsel, &color);
- gtk_color_selection_set_current_color (colorsel, &color);
- g_signal_connect(G_OBJECT(colorsel), "color_changed", G_CALLBACK(color_changed), (gpointer)colorsel);
- g_signal_connect(G_OBJECT(colorseldlg), "response", G_CALLBACK(color_response), NULL);
- g_signal_connect(G_OBJECT(colorseldlg), "destroy", G_CALLBACK(color_destroy), NULL);
-
-
- gtk_widget_show(colorseldlg);
-}
-
-static void keyframe_event(gpointer priv)
-{
- toggle_keyframe();
-}
-
-static void erase_event(gpointer priv)
-{
- copy_mark_to_undo();
- erase_mark(0);
- draw_image(0, 0, -1, -1);
-}
-
-static void erase_color_event(gpointer priv)
-{
- copy_mark_to_undo();
- erase_mark(mark_selected + 1);
- draw_image(0, 0, -1, -1);
-}
-
-static void zoom_in_event(gpointer priv)
-{
- if (img_scale_x < 64) {
- int aspect = img_scale_y / img_scale_x;
- img_scale_x += 4;
- img_scale_y = img_scale_x * aspect;
- create_or_reset_pixbuf(0);
- }
-}
-
-static void zoom_out_event(gpointer priv)
-{
- if (img_scale_x > 4) {
- int aspect = img_scale_y / img_scale_x;
- img_scale_x -= 4;
- img_scale_y = img_scale_x * aspect;
- create_or_reset_pixbuf(0);
- }
-}
-
-static void zoom_100_event(gpointer priv)
-{
- img_scale_x = 16;
- img_scale_y = 16;
- create_or_reset_pixbuf(0);
-}
-
-static void zoom_field_event(gpointer priv)
-{
- if (gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv))
- img_scale_y = img_scale_x*2;
- else
- img_scale_y = img_scale_x;
- create_or_reset_pixbuf(1);
-}
-
-static void show_highlighted_event(gpointer priv)
-{
- highlight = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
- set_button_toggel_by_label(TOGGLE_LABEL_HIGHLIGHT, highlight);
-}
-
-static void show_preview_event(gpointer priv)
-{
- preview = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
- set_button_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview);
-}
-
-static void colorize_event(gpointer priv)
-{
- if (rendered) {
- printerror("Disable colorized view first.");
- return;
- }
-#ifdef WITH_OPENCV
- if (flowview) {
- printerror("Disable flow view first.");
- return;
- }
-#endif
- if (img_mark_buffer)
- colorize_image();
-}
-
-static void show_colorized_event(gpointer priv)
-{
- if (timeline_frames > 1)
- rendered = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
- else
- rendered = 0;
- gtk_check_menu_item_set_active((GtkCheckMenuItem *)priv, rendered);
- set_button_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered);
-}
-
-#ifdef WITH_OPENCV
-static void show_flow_event(gpointer priv)
-{
- if (flow_enable && timeline_frames > 1)
- flowview = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
- else
- flowview = 0;
- gtk_check_menu_item_set_active((GtkCheckMenuItem *)priv, flowview);
- set_button_toggel_by_label(TOGGLE_LABEL_FLOWVIEW, flowview);
-}
-#endif
-
-static void dummy_event(gpointer priv)
-{
-}
-
-struct my_menu_item {
- enum toggle_label label;
- GtkWidget *widget;
- const char *text;
- void (*handler)(gpointer priv);
- gchar *stock;
-};
-
-struct my_menu {
- const char *text;
- struct my_menu_item *items;
-};
-
-struct my_menu_item file_menu_items[] = {
- { TOGGLE_LABEL_NONE, NULL, "Open", open_event, GTK_STOCK_OPEN },
- { TOGGLE_LABEL_NONE, NULL, "Save", save_event, GTK_STOCK_SAVE },
- { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Exit", exit_event, GTK_STOCK_QUIT },
- { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
-};
-
-struct my_menu_item edit_menu_items[] = {
- { TOGGLE_LABEL_NONE, NULL, "Undo", undo_event, GTK_STOCK_UNDO },
- { TOGGLE_LABEL_NONE, NULL, "Redo", redo_event, GTK_STOCK_REDO },
- { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Copy", copy_event, GTK_STOCK_COPY },
- { TOGGLE_LABEL_NONE, NULL, "Copy All", copy_all_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Paste", paste_event, GTK_STOCK_PASTE },
- { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Palette", palette_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Bright/Contrast", bc_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Adjust Levels", level_event, NULL },
-#ifdef WITH_OPENCV
- { TOGGLE_LABEL_NONE, NULL, "Optical Flow", flow_event, NULL },
-#endif
- { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Keyframe", keyframe_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "Clear", erase_event, GTK_STOCK_CLEAR },
- { TOGGLE_LABEL_NONE, NULL, "Clear Color", erase_color_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
-};
-
-struct my_menu_item view_menu_items[] = {
- { TOGGLE_LABEL_NONE, NULL, "Zoom In", zoom_in_event, GTK_STOCK_ZOOM_IN },
- { TOGGLE_LABEL_NONE, NULL, "Zoom Out", zoom_out_event, GTK_STOCK_ZOOM_OUT },
- { TOGGLE_LABEL_NONE, NULL, "Zoom 100", zoom_100_event, GTK_STOCK_ZOOM_100 },
- { TOGGLE_LABEL_ZOOMFIELDS, NULL, "Zoom Field", zoom_field_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
- { TOGGLE_LABEL_HIGHLIGHT, NULL, "Highlight color", show_highlighted_event, NULL },
- { TOGGLE_LABEL_PREVIEW, NULL, "Preview color", show_preview_event, NULL },
- { TOGGLE_LABEL_RENDERED, NULL, "Show colorized", show_colorized_event, NULL },
-#ifdef WITH_OPENCV
- { TOGGLE_LABEL_FLOWVIEW, NULL, "Show flow", show_flow_event, NULL },
-#endif
- { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
-};
-
-struct my_menu_item render_menu_items[] = {
- { TOGGLE_LABEL_NONE, NULL, "Colorize Image", colorize_event, NULL },
- { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
-};
-
-struct my_menu menus[] = {
- { "_File", file_menu_items },
- { "_Edit", edit_menu_items },
- { "_View", view_menu_items },
- { "_Render", render_menu_items },
- { NULL, NULL }
-};
-
-/* create menu bar */
-static void create_menus(GtkWidget *menu_bar)
-{
- GtkWidget *root_menu;
- GtkWidget *menu;
- GtkWidget *menu_item;
- struct my_menu_item *items;
- int i, j;
-
- /* create vbox and add menu_bar */
- for (i = 0; menus[i].text; i++) {
- /* create menu with items */
- items = menus[i].items;
- menu = gtk_menu_new();
- for (j = 0; items[j].text; j++) {
- if (!items[j].text[0])
- menu_item = gtk_separator_menu_item_new();
- else if (items[j].stock)
- menu_item = gtk_image_menu_item_new_from_stock(items[j].stock, NULL);
- else if (items[j].label != TOGGLE_LABEL_NONE)
- menu_item = gtk_check_menu_item_new_with_label(items[j].text);
- else
- menu_item = gtk_menu_item_new_with_label(items[j].text);
- items[j].widget = menu_item;
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
- g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(items[j].handler), menu_item);
- gtk_widget_show(menu_item);
- }
- /* create root menu and add to menu_bar */
- root_menu = gtk_menu_item_new_with_mnemonic(menus[i].text);
- gtk_widget_show(root_menu);
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(root_menu), menu);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), root_menu);
- }
-
-}
-
-static void set_menu_toggel_by_label(enum toggle_label label, gboolean active)
-{
- struct my_menu_item *items;
- int i, j;
-
- for (i = 0; menus[i].text; i++) {
- items = menus[i].items;
- for (j = 0; items[j].text; j++) {
- if (items[j].label == label)
- gtk_check_menu_item_set_active((GtkCheckMenuItem *)items[j].widget, active);
- }
- }
-}
-
-/*
* palette
*/
{ TOGGLE_LABEL_NONE, NULL, NULL, 0, NULL, NULL, NULL },
};
-static void set_button_toggel_by_label(enum toggle_label label, gboolean active)
+void set_button_toggel_by_label(enum toggle_label label, gboolean active)
{
int i;
extern GtkWidget *palette_treeview;
extern GtkWidget *timeline_scroll;
extern GtkLabel *img_label;
+
+extern GtkWidget *colorseldlg;
+extern GtkColorSelection *colorsel;
+void color_response(GtkDialog *dialog, gint response_id, gpointer user_data);
+
+/* the labels are used to identify menu and button items */
+enum toggle_label {
+ TOGGLE_LABEL_NONE = 0,
+ TOGGLE_LABEL_HIGHLIGHT,
+ TOGGLE_LABEL_PREVIEW,
+ TOGGLE_LABEL_RENDERED,
+ TOGGLE_LABEL_FLOWVIEW,
+ TOGGLE_LABEL_ZOOMFIELDS,
+};
+
+void set_button_toggel_by_label(enum toggle_label label, gboolean active);
+
+
--- /dev/null
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include "../src/mark.h"
+#ifdef WITH_OPENCV
+#include "../src/opticalflow.h"
+#endif
+#include "main.h"
+#include "menu.h"
+#include "image.h"
+#include "palette.h"
+#include "timeline.h"
+#include "colorize.h"
+#include "brightcontrast.h"
+#include "level.h"
+#include "fill.h"
+#ifdef WITH_OPENCV
+#include "flow.h"
+#endif
+
+/*
+ * menus
+ */
+
+static void open_event(gpointer priv)
+{
+ GtkWidget *dialog;
+ char *filename = NULL;
+
+ if (anything_modified) {
+ int ret;
+ GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(main_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK_CANCEL,
+ "Image has been changed, really open new image?");
+ ret = gtk_dialog_run(GTK_DIALOG (dialog));
+ gtk_widget_destroy(dialog);
+ if (ret != GTK_RESPONSE_OK)
+ return;
+ }
+
+ dialog = gtk_file_chooser_dialog_new("Select first grey image",
+ GTK_WINDOW(main_window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ if (frame_list)
+ gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), frame_list[timeline_selected].filename);
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+ filename = strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
+ }
+
+ gtk_widget_destroy(dialog);
+
+ if (filename) {
+// do not save timeline_select_and_save(timeline_selected, timeline_selected);
+
+ create_timeline(filename);
+ if (frame_list)
+ create_image(frame_list[timeline_selected].filename, 1);
+ free(filename);
+ }
+
+}
+
+static void save_event(gpointer priv)
+{
+ timeline_select_and_save(timeline_selected, timeline_selected);
+}
+
+static void exit_event(gpointer priv)
+{
+ main_destroy();
+}
+
+static void color_changed(GtkWidget *widget, GtkColorSelection *colorsel)
+{
+}
+
+void undo_event(gpointer priv)
+{
+ copy_undo_to_mark(0);
+ draw_image(0, 0, -1, -1);
+}
+
+void redo_event(gpointer priv)
+{
+ copy_undo_to_mark(1);
+ draw_image(0, 0, -1, -1);
+}
+
+void copy_event(gpointer priv)
+{
+ copy_color(mark_selected + 1);
+}
+
+static void copy_all_event(gpointer priv)
+{
+ copy_color(0);
+}
+
+void paste_event(gpointer priv)
+{
+ copy_mark_to_undo();
+ paste_color();
+ draw_image(0, 0, -1, -1);
+}
+
+static void color_destroy(GtkWidget *widget, gpointer data)
+{
+ colorseldlg = NULL;
+}
+
+void palette_event(gpointer priv)
+{
+ GdkColor color;
+
+ if (colorseldlg) {
+ gtk_widget_destroy(colorseldlg);
+ colorseldlg = NULL;
+ return;
+ }
+
+ color.red = mark_palette[mark_selected].r * 256 + 128;
+ color.green = mark_palette[mark_selected].g * 256 + 128;
+ color.blue = mark_palette[mark_selected].b * 256 + 128;
+
+ colorseldlg = gtk_color_selection_dialog_new("Select Color");
+ colorsel = GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (colorseldlg)->colorsel);
+ gtk_color_selection_set_previous_color (colorsel, &color);
+ gtk_color_selection_set_current_color (colorsel, &color);
+ g_signal_connect(G_OBJECT(colorsel), "color_changed", G_CALLBACK(color_changed), (gpointer)colorsel);
+ g_signal_connect(G_OBJECT(colorseldlg), "response", G_CALLBACK(color_response), NULL);
+ g_signal_connect(G_OBJECT(colorseldlg), "destroy", G_CALLBACK(color_destroy), NULL);
+
+
+ gtk_widget_show(colorseldlg);
+}
+
+static void keyframe_event(gpointer priv)
+{
+ toggle_keyframe();
+}
+
+static void erase_event(gpointer priv)
+{
+ printerror("Use RIGHT mouse button to erase!");
+}
+
+static void clear_event(gpointer priv)
+{
+ copy_mark_to_undo();
+ erase_mark(0);
+ draw_image(0, 0, -1, -1);
+}
+
+static void clear_color_event(gpointer priv)
+{
+ copy_mark_to_undo();
+ erase_mark(mark_selected + 1);
+ draw_image(0, 0, -1, -1);
+}
+
+void zoom_in_event(gpointer priv)
+{
+ if (img_scale_x < 64) {
+ int aspect = img_scale_y / img_scale_x;
+ img_scale_x += 4;
+ img_scale_y = img_scale_x * aspect;
+ create_or_reset_pixbuf(0);
+ }
+}
+
+void zoom_out_event(gpointer priv)
+{
+ if (img_scale_x > 4) {
+ int aspect = img_scale_y / img_scale_x;
+ img_scale_x -= 4;
+ img_scale_y = img_scale_x * aspect;
+ create_or_reset_pixbuf(0);
+ }
+}
+
+static void zoom_100_event(gpointer priv)
+{
+ img_scale_x = 16;
+ img_scale_y = 16;
+ create_or_reset_pixbuf(0);
+}
+
+static void zoom_field_event(gpointer priv)
+{
+ if (gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv))
+ img_scale_y = img_scale_x*2;
+ else
+ img_scale_y = img_scale_x;
+ create_or_reset_pixbuf(1);
+}
+
+static void show_highlighted_event(gpointer priv)
+{
+ highlight = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
+ set_button_toggel_by_label(TOGGLE_LABEL_HIGHLIGHT, highlight);
+}
+
+static void show_preview_event(gpointer priv)
+{
+ preview = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
+ set_button_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview);
+}
+
+void colorize_event(gpointer priv)
+{
+ if (rendered) {
+ printerror("Disable colorized view first.");
+ return;
+ }
+#ifdef WITH_OPENCV
+ if (flowview) {
+ printerror("Disable flow view first.");
+ return;
+ }
+#endif
+ if (img_mark_buffer)
+ colorize_image();
+}
+
+static void show_colorized_event(gpointer priv)
+{
+ if (timeline_frames > 1)
+ rendered = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
+ else
+ rendered = 0;
+ gtk_check_menu_item_set_active((GtkCheckMenuItem *)priv, rendered);
+ set_button_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered);
+}
+
+#ifdef WITH_OPENCV
+static void show_flow_event(gpointer priv)
+{
+ if (flow_enable && timeline_frames > 1)
+ flowview = gtk_check_menu_item_get_active((GtkCheckMenuItem *)priv);
+ else
+ flowview = 0;
+ gtk_check_menu_item_set_active((GtkCheckMenuItem *)priv, flowview);
+ set_button_toggel_by_label(TOGGLE_LABEL_FLOWVIEW, flowview);
+}
+#endif
+
+static void dummy_event(gpointer priv)
+{
+}
+
+
+
+struct my_menu_item {
+ enum toggle_label label;
+ GtkWidget *widget;
+ const char *text;
+ void (*handler)(gpointer priv);
+ gchar *stock;
+};
+
+struct my_menu {
+ const char *text;
+ struct my_menu_item *items;
+};
+
+struct my_menu_item file_menu_items[] = {
+ { TOGGLE_LABEL_NONE, NULL, "Open", open_event, GTK_STOCK_OPEN },
+ { TOGGLE_LABEL_NONE, NULL, "Save", save_event, GTK_STOCK_SAVE },
+ { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Exit", exit_event, GTK_STOCK_QUIT },
+ { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
+};
+
+struct my_menu_item edit_menu_items[] = {
+ { TOGGLE_LABEL_NONE, NULL, "Undo", undo_event, GTK_STOCK_UNDO },
+ { TOGGLE_LABEL_NONE, NULL, "Redo", redo_event, GTK_STOCK_REDO },
+ { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Copy", copy_event, GTK_STOCK_COPY },
+ { TOGGLE_LABEL_NONE, NULL, "Copy All", copy_all_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Paste", paste_event, GTK_STOCK_PASTE },
+ { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Palette", palette_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Bright/Contrast", bc_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Adjust Levels", level_event, NULL },
+#ifdef WITH_OPENCV
+ { TOGGLE_LABEL_NONE, NULL, "Optical Flow", flow_event, NULL },
+#endif
+ { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Keyframe", keyframe_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Erase Tool", erase_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "Clear", clear_event, GTK_STOCK_CLEAR },
+ { TOGGLE_LABEL_NONE, NULL, "Clear Color", clear_color_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
+};
+
+struct my_menu_item view_menu_items[] = {
+ { TOGGLE_LABEL_NONE, NULL, "Zoom In", zoom_in_event, GTK_STOCK_ZOOM_IN },
+ { TOGGLE_LABEL_NONE, NULL, "Zoom Out", zoom_out_event, GTK_STOCK_ZOOM_OUT },
+ { TOGGLE_LABEL_NONE, NULL, "Zoom 100", zoom_100_event, GTK_STOCK_ZOOM_100 },
+ { TOGGLE_LABEL_ZOOMFIELDS, NULL, "Zoom Field", zoom_field_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, "", dummy_event, NULL },
+ { TOGGLE_LABEL_HIGHLIGHT, NULL, "Highlight color", show_highlighted_event, NULL },
+ { TOGGLE_LABEL_PREVIEW, NULL, "Preview color", show_preview_event, NULL },
+ { TOGGLE_LABEL_RENDERED, NULL, "Show colorized", show_colorized_event, NULL },
+#ifdef WITH_OPENCV
+ { TOGGLE_LABEL_FLOWVIEW, NULL, "Show flow", show_flow_event, NULL },
+#endif
+ { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
+};
+
+struct my_menu_item render_menu_items[] = {
+ { TOGGLE_LABEL_NONE, NULL, "Colorize Image", colorize_event, NULL },
+ { TOGGLE_LABEL_NONE, NULL, NULL, NULL }
+};
+
+struct my_menu menus[] = {
+ { "_File", file_menu_items },
+ { "_Edit", edit_menu_items },
+ { "_View", view_menu_items },
+ { "_Render", render_menu_items },
+ { NULL, NULL }
+};
+
+/* create menu bar */
+void create_menus(GtkWidget *menu_bar)
+{
+ GtkWidget *root_menu;
+ GtkWidget *menu;
+ GtkWidget *menu_item;
+ struct my_menu_item *items;
+ int i, j;
+
+ /* create vbox and add menu_bar */
+ for (i = 0; menus[i].text; i++) {
+ /* create menu with items */
+ items = menus[i].items;
+ menu = gtk_menu_new();
+ for (j = 0; items[j].text; j++) {
+ if (!items[j].text[0])
+ menu_item = gtk_separator_menu_item_new();
+ else if (items[j].stock)
+ menu_item = gtk_image_menu_item_new_from_stock(items[j].stock, NULL);
+ else if (items[j].label != TOGGLE_LABEL_NONE)
+ menu_item = gtk_check_menu_item_new_with_label(items[j].text);
+ else
+ menu_item = gtk_menu_item_new_with_label(items[j].text);
+ items[j].widget = menu_item;
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
+ g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(items[j].handler), menu_item);
+ gtk_widget_show(menu_item);
+ }
+ /* create root menu and add to menu_bar */
+ root_menu = gtk_menu_item_new_with_mnemonic(menus[i].text);
+ gtk_widget_show(root_menu);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(root_menu), menu);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), root_menu);
+ }
+
+}
+
+void set_menu_toggel_by_label(enum toggle_label label, gboolean active)
+{
+ struct my_menu_item *items;
+ int i, j;
+
+ for (i = 0; menus[i].text; i++) {
+ items = menus[i].items;
+ for (j = 0; items[j].text; j++) {
+ if (items[j].label == label)
+ gtk_check_menu_item_set_active((GtkCheckMenuItem *)items[j].widget, active);
+ }
+ }
+}
--- /dev/null
+
+void zoom_in_event(gpointer priv);
+void zoom_out_event(gpointer priv);
+void palette_event(gpointer priv);
+void colorize_event(gpointer priv);
+void undo_event(gpointer priv);
+void redo_event(gpointer priv);
+void copy_event(gpointer priv);
+void paste_event(gpointer priv);
+void create_menus(GtkWidget *menu_bar);
+void set_menu_toggel_by_label(enum toggle_label label, gboolean active);
+
+