Code clean-up, removing use of deprecated GtkCList widget

This commit is contained in:
Maurits Rijk 2003-01-01 13:23:47 +00:00
parent 0f2f38e20e
commit 9897f388ae
20 changed files with 394 additions and 323 deletions

View File

@ -1,3 +1,18 @@
2003-01-01 Maurits Rijk <lpeek.mrijk@consunet.nl>
* plug-ins/imagemap/imap_about.c
* plug-ins/imagemap/imap_file.c
* plug-ins/imagemap/imap_grid.c
* plug-ins/imagemap/imap_main.c
* plug-ins/imagemap/imap_menu.[ch]
* plug-ins/imagemap/imap_polygon.[ch]
* plug-ins/imagemap/imap_preview.c
* plug-ins/imagemap/imap_stock.[ch]
* plug-ins/imagemap/imap_edit_area_info.[ch]
* plug-ins/imagemap/imap_statusbar.[ch]
* plug-ins/imagemap/imap_cmd_copy.[ch]: removed use of deprecated GTK
widgets and routines plus some code clean-up.
2003-01-01 Tor Lillqvist <tml@iki.fi>
* modules/Makefile.am: On Win32, use -no-undefined, and add

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -41,7 +41,7 @@ do_about_dialog(void)
default_dialog_hide_help_button(dialog);
default_dialog_set_label(dialog, _("Imagemap plug-in 2.0"));
default_dialog_set_label(
dialog, _("Copyright(c) 1999-2002 by Maurits Rijk"));
dialog, _("Copyright(c) 1999-2003 by Maurits Rijk"));
default_dialog_set_label(dialog, _("lpeek.mrijk@consunet.nl"));
default_dialog_set_label(
dialog, _(" Released under the GNU General Public License "));

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-1999 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -23,11 +23,6 @@
#include "config.h"
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include "imap_cmd_copy.h"

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-1999 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -26,10 +26,6 @@
#include <stdio.h>
#include <string.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
@ -42,7 +38,7 @@
#include "libgimp/stdplugins-intl.h"
static gint callback_lock;
static gboolean callback_lock;
static gchar*
@ -105,8 +101,9 @@ set_url(GtkWidget *widget, AreaInfoDialog_t *param, const gchar *prefix)
p = url;
}
}
gtk_entry_set_text(GTK_ENTRY(param->url), prefix);
gtk_entry_append_text(GTK_ENTRY(param->url), p);
p = g_strconcat(prefix, p, NULL);
gtk_entry_set_text(GTK_ENTRY(param->url), p);
g_free(p);
g_free(url);
}
}

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -29,6 +29,7 @@
#include "imap_default_dialog.h"
#include "imap_file.h"
#include "imap_main.h"
#include "imap_misc.h"
#include "libgimp/stdplugins-intl.h"
@ -119,55 +120,6 @@ do_file_save_as_dialog(void)
gtk_widget_show(dialog);
}
typedef struct {
DefaultDialog_t *dialog;
GtkWidget *label;
} Alert_t;
Alert_t*
create_alert(const gchar *stock_id)
{
Alert_t *alert = g_new(Alert_t, 1);
DefaultDialog_t *dialog;
GtkWidget *hbox;
GtkWidget *image;
alert->dialog = dialog = make_default_dialog("");
default_dialog_hide_apply_button(dialog);
default_dialog_hide_cancel_button(dialog);
hbox = gtk_hbox_new(FALSE, 12);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog->dialog)->vbox), hbox,
TRUE, TRUE, 10);
gtk_widget_show(hbox);
image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_DIALOG);
gtk_container_add(GTK_CONTAINER(hbox), image);
gtk_widget_show(image);
alert->label = gtk_label_new("");
gtk_misc_set_alignment(GTK_MISC(alert->label), 0.0, 0.0);
gtk_container_add(GTK_CONTAINER(hbox), alert->label);
gtk_widget_show(alert->label);
return alert;
}
void
alert_set_text(Alert_t *alert, const char *primary_text,
const char *secondary_text)
{
gchar *text;
text =
g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s",
primary_text, secondary_text);
gtk_label_set_markup(GTK_LABEL(alert->label), text);
g_free(text);
}
void
do_file_error_dialog(const char *error, const char *filename)
{

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -364,6 +364,7 @@ draw_grid(GtkWidget *preview)
if (!grid_gc) {
grid_gc = gdk_gc_new(preview->window);
gdk_gc_set_line_attributes(grid_gc, 1, GDK_LINE_ON_OFF_DASH,
GDK_CAP_BUTT, GDK_JOIN_BEVEL);
}

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -64,6 +64,7 @@
#include "imap_grid.h"
#include "imap_main.h"
#include "imap_menu.h"
#include "imap_misc.h"
#include "imap_object.h"
#include "imap_polygon.h"
#include "imap_popup.h"
@ -469,7 +470,7 @@ fuzzy_select_on_button_press(GtkWidget *widget, GdkEventButton *event,
add_shape(object);
x0 = gimp_path_get_point_at_dist(image_ID, 0.0, &y0, &grad0);
polygon->points = g_list_append(NULL, new_point(x0, y0));
polygon_append_point(polygon, x0, y0);
for (distance = 1.0;; distance += 1.0) {
gint x1, y1 = -1;
@ -490,8 +491,7 @@ fuzzy_select_on_button_press(GtkWidget *widget, GdkEventButton *event,
diff = grad1;
if (fabs(diff) > 0.1) {
polygon->points = g_list_append(polygon->points,
new_point(x1, y1));
polygon_append_point(polygon, x1, y1);
grad0 = grad1;
}
x0 = x1;
@ -748,18 +748,15 @@ clear_map_info(void)
static void
do_data_changed_dialog(void (*continue_cb)(gpointer), gpointer param)
{
static DefaultDialog_t *dialog;
static Alert_t *alert;
if (!dialog) {
dialog = make_default_dialog(_("Data changed"));
default_dialog_hide_apply_button(dialog);
default_dialog_set_label(
dialog,
_("Some data has been changed.\n"
"Do you really want to discard your changes?"));
if (!alert) {
alert = create_confirm_alert(GTK_STOCK_DIALOG_WARNING);
alert_set_text(alert, _("Some data has been changed!"),
_("Do you really want to discard your changes?"));
}
default_dialog_set_ok_cb(dialog, continue_cb, param);
default_dialog_show(dialog);
default_dialog_set_ok_cb(alert->dialog, continue_cb, param);
default_dialog_show(alert->dialog);
}
static void
@ -990,21 +987,16 @@ resize_image_cancel_cb(gpointer data)
static void
do_image_size_changed_dialog(void)
{
static DefaultDialog_t *dialog;
static Alert_t *alert;
if (!dialog) {
dialog = make_default_dialog( _("Image size changed"));
default_dialog_hide_apply_button(dialog);
default_dialog_set_label(
dialog,
_("Image size has changed.\n"
"Resize Area's?"));
default_dialog_set_ok_cb(dialog, resize_image_ok_cb, NULL);
default_dialog_set_cancel_cb(dialog, resize_image_cancel_cb, NULL);
if (!alert) {
alert = create_confirm_alert(GTK_STOCK_DIALOG_WARNING);
alert_set_text(alert, _("Image size has changed."),
_("Resize area's?"));
}
default_dialog_show(dialog);
default_dialog_set_ok_cb(alert->dialog, resize_image_ok_cb, NULL);
default_dialog_set_cancel_cb(alert->dialog, resize_image_cancel_cb, NULL);
default_dialog_show(alert->dialog);
}
static void
@ -1056,10 +1048,11 @@ toggle_area_list(void)
selection_toggle_visibility(_selection);
}
static void
static gboolean
close_callback(GtkWidget *widget, gpointer data)
{
gtk_main_quit();
do_quit();
return TRUE;
}
static gboolean
@ -1442,7 +1435,7 @@ dialog(GimpDrawable *drawable)
gimp_help_connect (dlg, gimp_standard_help_func, "filters/imagemap.html");
gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE);
g_signal_connect(G_OBJECT(dlg), "destroy",
g_signal_connect(G_OBJECT(dlg), "delete_event",
G_CALLBACK(close_callback), NULL);
g_signal_connect(G_OBJECT(dlg), "key_press_event",
G_CALLBACK(key_press_cb), NULL);

View File

@ -183,6 +183,7 @@ make_file_menu(GtkWidget *menu_bar)
_menu.file_menu = file_menu;
make_item_with_image(file_menu, GTK_STOCK_OPEN, menu_command,
&_menu.cmd_open);
_menu.open_recent = make_sub_menu(file_menu, _("Open Recent"));
make_item_with_image(file_menu, GTK_STOCK_SAVE, menu_command,
&_menu.cmd_save);
item = make_item_with_image(file_menu, GTK_STOCK_SAVE_AS, menu_command,
@ -424,11 +425,13 @@ void
menu_build_mru_items(MRU_t *mru)
{
GList *p;
gint position = 7; /* Position of 'Close' entry */
gint position = 0;
int i;
if (_menu.nr_off_mru_items) {
GList *children = gtk_container_get_children(GTK_CONTAINER(_menu.file_menu));
GList *children;
children = gtk_container_get_children(GTK_CONTAINER(_menu.open_recent));
p = g_list_nth(children, position);
for (i = 0; i < _menu.nr_off_mru_items; i++, p = p->next) {
@ -439,7 +442,7 @@ menu_build_mru_items(MRU_t *mru)
i = 0;
for (p = mru->list; p; p = p->next, i++) {
GtkWidget *item = insert_item_with_label(_menu.file_menu, position++,
GtkWidget *item = insert_item_with_label(_menu.open_recent, position++,
(gchar*) p->data,
menu_mru, p->data);
if (i < 9) {
@ -447,7 +450,6 @@ menu_build_mru_items(MRU_t *mru)
add_accelerator(item, accelerator_key, GDK_CONTROL_MASK);
}
}
insert_separator(_menu.file_menu, position);
_menu.nr_off_mru_items = i + 1;
}

View File

@ -28,60 +28,61 @@
#include "imap_mru.h"
typedef struct {
GtkWidget *file_menu;
GtkWidget *edit_menu;
GtkWidget *undo;
GtkWidget *redo;
GtkWidget *cut;
GtkWidget *copy;
GtkWidget *clear;
GtkWidget *edit;
GtkWidget *deselect_all;
GtkWidget *arrow;
GtkWidget *fuzzy_select;
GtkWidget *rectangle;
GtkWidget *circle;
GtkWidget *polygon;
GtkWidget *grid;
GtkWidget *gray;
GtkWidget *color;
GtkWidget *zoom[8];
GtkWidget *zoom_in;
GtkWidget *zoom_out;
GtkWidget *file_menu;
GtkWidget *edit_menu;
GtkWidget *open_recent;
GtkWidget *undo;
GtkWidget *redo;
GtkWidget *cut;
GtkWidget *copy;
GtkWidget *clear;
GtkWidget *edit;
GtkWidget *deselect_all;
GtkWidget *arrow;
GtkWidget *fuzzy_select;
GtkWidget *rectangle;
GtkWidget *circle;
GtkWidget *polygon;
GtkWidget *grid;
GtkWidget *gray;
GtkWidget *color;
GtkWidget *zoom[8];
GtkWidget *zoom_in;
GtkWidget *zoom_out;
gint nr_off_mru_items;
gint nr_off_mru_items;
CommandFactory_t cmd_open;
CommandFactory_t cmd_save;
CommandFactory_t cmd_save_as;
CommandFactory_t cmd_preferences;
CommandFactory_t cmd_close;
CommandFactory_t cmd_quit;
CommandFactory_t cmd_undo;
CommandFactory_t cmd_redo;
CommandFactory_t cmd_cut;
CommandFactory_t cmd_copy;
CommandFactory_t cmd_paste;
CommandFactory_t cmd_select_all;
CommandFactory_t cmd_deselect_all;
CommandFactory_t cmd_clear;
CommandFactory_t cmd_edit_area_info;
CommandFactory_t cmd_area_list;
CommandFactory_t cmd_source;
CommandFactory_t cmd_color;
CommandFactory_t cmd_gray;
CommandFactory_t cmd_zoom_in;
CommandFactory_t cmd_zoom_out;
CommandFactory_t cmd_edit_map_info;
CommandFactory_t cmd_grid_settings;
CommandFactory_t cmd_create_guides;
CommandFactory_t cmd_use_gimp_guides;
CommandFactory_t cmd_about;
CommandFactory_t cmd_open;
CommandFactory_t cmd_save;
CommandFactory_t cmd_save_as;
CommandFactory_t cmd_preferences;
CommandFactory_t cmd_close;
CommandFactory_t cmd_quit;
CommandFactory_t cmd_undo;
CommandFactory_t cmd_redo;
CommandFactory_t cmd_cut;
CommandFactory_t cmd_copy;
CommandFactory_t cmd_paste;
CommandFactory_t cmd_select_all;
CommandFactory_t cmd_deselect_all;
CommandFactory_t cmd_clear;
CommandFactory_t cmd_edit_area_info;
CommandFactory_t cmd_area_list;
CommandFactory_t cmd_source;
CommandFactory_t cmd_color;
CommandFactory_t cmd_gray;
CommandFactory_t cmd_zoom_in;
CommandFactory_t cmd_zoom_out;
CommandFactory_t cmd_edit_map_info;
CommandFactory_t cmd_grid_settings;
CommandFactory_t cmd_create_guides;
CommandFactory_t cmd_use_gimp_guides;
CommandFactory_t cmd_about;
} Menu_t;
#define menu_set_open_command(menu, command) \

View File

@ -70,6 +70,64 @@ make_toolbar_toggle_icon(GtkWidget *toolbar, const gchar *stock_id,
GTK_SIGNAL_FUNC(callback), udata);
}
static Alert_t*
create_base_alert(const gchar *stock_id)
{
Alert_t *alert = g_new(Alert_t, 1);
DefaultDialog_t *dialog;
GtkWidget *hbox;
GtkWidget *image;
alert->dialog = dialog = make_default_dialog("");
default_dialog_hide_apply_button(dialog);
hbox = gtk_hbox_new(FALSE, 12);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog->dialog)->vbox), hbox,
TRUE, TRUE, 10);
gtk_widget_show(hbox);
image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_DIALOG);
gtk_container_add(GTK_CONTAINER(hbox), image);
gtk_widget_show(image);
alert->label = gtk_label_new("");
gtk_misc_set_alignment(GTK_MISC(alert->label), 0.0, 0.0);
gtk_container_add(GTK_CONTAINER(hbox), alert->label);
gtk_widget_show(alert->label);
return alert;
}
Alert_t*
create_alert(const gchar *stock_id)
{
Alert_t *alert = create_base_alert(stock_id);
default_dialog_hide_cancel_button(alert->dialog);
return alert;
}
Alert_t*
create_confirm_alert(const gchar *stock_id)
{
return create_base_alert(stock_id);
}
void
alert_set_text(Alert_t *alert, const char *primary_text,
const char *secondary_text)
{
gchar *text;
text =
g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s",
primary_text, secondary_text);
gtk_label_set_markup(GTK_LABEL(alert->label), text);
g_free(text);
}
#define SASH_SIZE 8
static gint _sash_size = SASH_SIZE;

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -44,5 +44,15 @@ void set_sash_size(gboolean double_size);
void draw_sash(GdkWindow *window, GdkGC *gc, gint x, gint y);
gboolean near_sash(gint sash_x, gint sash_y, gint x, gint y);
typedef struct {
DefaultDialog_t *dialog;
GtkWidget *label;
} Alert_t;
Alert_t *create_alert(const gchar *stock_id);
Alert_t *create_confirm_alert(const gchar *stock_id);
void alert_set_text(Alert_t *alert, const char *primary_text,
const char *secondary_text);
#endif /* _IMAP_MISC_H */

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -26,11 +26,6 @@
#include <stdlib.h>
#include <stdio.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include "imap_cmd_delete_point.h"
@ -142,8 +137,7 @@ polygon_clone(Object_t *obj)
clone->points = NULL;
for (p = polygon->points; p; p = p->next) {
GdkPoint *point = (GdkPoint*) p->data;
clone->points = g_list_append(clone->points,
new_point(point->x, point->y));
polygon_append_point(clone, point->x, point->y);
}
return &clone->obj;
}
@ -158,8 +152,7 @@ polygon_assign(Object_t *obj, Object_t *des)
polygon_free_list(des_polygon);
for (p = src_polygon->points; p; p = p->next) {
GdkPoint *point = (GdkPoint*) p->data;
des_polygon->points = g_list_append(des_polygon->points,
new_point(point->x, point->y));
polygon_append_point(des_polygon, point->x, point->y);
}
}
@ -298,7 +291,8 @@ polygon_move(Object_t *obj, gint dx, gint dy)
typedef struct {
Object_t *obj;
GtkWidget *list;
GtkListStore *store;
GtkTreeSelection *selection;
GtkWidget *x;
GtkWidget *y;
GtkWidget *update;
@ -310,64 +304,98 @@ typedef struct {
} PolygonProperties_t;
static void
select_row_cb(GtkWidget *widget, gint row, gint column, GdkEventButton *event,
PolygonProperties_t *data)
select_row_cb(GtkTreeSelection *selection, PolygonProperties_t *data)
{
gchar *text;
data->selected_row = row;
GtkTreeIter iter;
GtkTreeModel *model;
_sash_point = g_list_nth(ObjectToPolygon(data->obj)->points, row)->data;
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
GdkPoint *point;
gtk_clist_get_text(GTK_CLIST(data->list), row, 0, &text);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->x), atoi(text));
gtk_tree_model_get (model, &iter, 0, &point, -1);
gtk_clist_get_text(GTK_CLIST(data->list), row, 1, &text);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->y), atoi(text));
_sash_point = point;
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->x), point->x);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->y), point->y);
}
}
static void
update_button_clicked(GtkWidget *widget, PolygonProperties_t *data)
{
gtk_clist_set_text(GTK_CLIST(data->list), data->selected_row, 0,
gtk_entry_get_text(GTK_ENTRY(data->x)));
gtk_clist_set_text(GTK_CLIST(data->list), data->selected_row, 1,
gtk_entry_get_text(GTK_ENTRY(data->y)));
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(data->store);
if (gtk_tree_selection_get_selected (data->selection, &model, &iter)) {
GdkPoint *point;
gint x = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->x));
gint y = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->y));
gtk_tree_model_get (model, &iter, 0, &point, -1);
point->x = x;
point->y = y;
gtk_list_store_set (data->store, &iter, 0, point, -1);
}
}
static void
set_buttons_sensitivity(PolygonProperties_t *data)
{
gint rows = GTK_CLIST(data->list)->rows;
gint sensitive = (rows != MAX_POLYGON_POINTS) && (rows > 2);
gtk_widget_set_sensitive(data->insert, sensitive);
gtk_widget_set_sensitive(data->append, sensitive);
gint rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(data->store),
NULL);
gtk_widget_set_sensitive(data->insert, rows != MAX_POLYGON_POINTS);
gtk_widget_set_sensitive(data->append, rows != MAX_POLYGON_POINTS);
gtk_widget_set_sensitive(data->remove, rows > 2);
}
static void
insert_button_clicked(GtkWidget *widget, PolygonProperties_t *data)
{
const gchar *text[2];
text[0] = gtk_entry_get_text(GTK_ENTRY(data->x));
text[1] = gtk_entry_get_text(GTK_ENTRY(data->y));
gtk_clist_insert(GTK_CLIST(data->list), data->selected_row, (gchar **) text);
set_buttons_sensitivity(data);
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(data->store);
if (gtk_tree_selection_get_selected (data->selection, &model, &iter)) {
Polygon_t *polygon = ObjectToPolygon(data->obj);
GdkPoint *point;
GList *here;
gint x = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->x));
gint y = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->y));
gtk_tree_model_get (model, &iter, 0, &point, -1);
here = g_list_find(polygon->points, point);
polygon->points = g_list_insert_before(polygon->points, here,
new_point(x, y));
polygon_fill_info_tab(data->obj, data);
}
}
static void
append_button_clicked(GtkWidget *widget, PolygonProperties_t *data)
{
const gchar *text[2];
text[0] = gtk_entry_get_text(GTK_ENTRY(data->x));
text[1] = gtk_entry_get_text(GTK_ENTRY(data->y));
gtk_clist_append(GTK_CLIST(data->list), (gchar **) text);
set_buttons_sensitivity(data);
gint x = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->x));
gint y = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->y));
polygon_append_point(ObjectToPolygon(data->obj), x, y);
polygon_fill_info_tab(data->obj, data);
}
static void
remove_button_clicked(GtkWidget *widget, PolygonProperties_t *data)
{
gtk_clist_remove(GTK_CLIST(data->list), data->selected_row);
set_buttons_sensitivity(data);
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(data->store);
if (gtk_tree_selection_get_selected (data->selection, &model, &iter)) {
Polygon_t *polygon = ObjectToPolygon(data->obj);
GdkPoint *point;
gtk_tree_model_get (model, &iter, 0, &point, -1);
polygon->points = g_list_remove(polygon->points, point);
g_free(point);
polygon_fill_info_tab(data->obj, data);
}
}
static void
@ -388,47 +416,80 @@ y_changed_cb(GtkWidget *widget, gpointer data)
edit_area_info_dialog_emit_geometry_signal(obj->class->info_dialog);
}
static void
render_x(GtkTreeViewColumn *column, GtkCellRenderer *cell,
GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
{
GdkPoint *point;
gchar scratch[16];
gtk_tree_model_get(tree_model, iter, 0, &point, -1);
sprintf(scratch, "%d", point->x);
g_object_set(G_OBJECT(cell), "text", scratch, "xalign", 1.0, NULL);
}
static void
render_y(GtkTreeViewColumn *column, GtkCellRenderer *cell,
GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
{
GdkPoint *point;
gchar scratch[16];
gtk_tree_model_get(tree_model, iter, 0, &point, -1);
sprintf(scratch, "%d", point->y);
g_object_set(G_OBJECT(cell), "text", scratch, "xalign", 1.0, NULL);
}
static gpointer
polygon_create_info_widget(GtkWidget *frame)
{
PolygonProperties_t *props = g_new(PolygonProperties_t, 1);
GtkWidget *hbox, *swin, *table, *label;
GtkWidget *list;
GtkWidget *view;
gint max_width = get_image_width();
gint max_height = get_image_height();
gchar *titles[] = {N_("x (pixels)"), N_("y (pixels)")};
gint i;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
hbox = gtk_hbox_new(FALSE, 1);
gtk_container_add(GTK_CONTAINER(frame), hbox);
gtk_widget_show(hbox);
for (i = 0; i < 2; i++)
titles[i] = gettext(titles[i]);
props->list = list = gtk_clist_new_with_titles(2, titles);
gtk_clist_column_titles_passive(GTK_CLIST(list));
swin = gtk_scrolled_window_new(NULL, NULL);
gtk_container_set_border_width(GTK_CONTAINER(swin), 10);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(swin),
GTK_SHADOW_IN);
gtk_box_pack_start(GTK_BOX(hbox), swin, FALSE, FALSE, FALSE);
gtk_widget_show(swin);
gtk_clist_set_shadow_type(GTK_CLIST(list), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), list);
props->store = gtk_list_store_new (1, G_TYPE_POINTER);
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (props->store));
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE);
g_object_unref (G_OBJECT (props->store));
gtk_widget_show (view);
gtk_clist_set_column_width(GTK_CLIST(list), 0, 48);
gtk_clist_set_column_width(GTK_CLIST(list), 1, 48);
gtk_clist_set_column_justification(GTK_CLIST(list), 0, GTK_JUSTIFY_RIGHT);
gtk_clist_set_column_justification(GTK_CLIST(list), 1, GTK_JUSTIFY_RIGHT);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("x (pixels)"),
renderer,
NULL);
gtk_tree_view_column_set_cell_data_func(column, renderer,
render_x, props, NULL);
gtk_tree_view_column_set_alignment(column, 0.5);
gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
gtk_signal_connect(GTK_OBJECT(list), "select_row",
GTK_SIGNAL_FUNC(select_row_cb), props);
gtk_clist_set_selection_mode(GTK_CLIST(list), GTK_SELECTION_SINGLE);
gtk_widget_show(list);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("y (pixels)"),
renderer,
NULL);
gtk_tree_view_column_set_cell_data_func(column, renderer,
render_y, props, NULL);
gtk_tree_view_column_set_alignment(column, 0.5);
gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
gtk_container_add (GTK_CONTAINER (swin), view);
table = gtk_table_new(6, 3, FALSE);
gtk_container_set_border_width(GTK_CONTAINER(table), 10);
@ -440,49 +501,54 @@ polygon_create_info_widget(GtkWidget *frame)
label = create_label_in_table(table, 0, 0, "_x:");
props->x = create_spin_button_in_table(table, label, 0, 1, 1, 0,
max_width - 1);
gtk_signal_connect(GTK_OBJECT(props->x), "changed",
(GtkSignalFunc) x_changed_cb, (gpointer) props);
gtk_widget_set_usize(props->x, 64, -1);
g_signal_connect(G_OBJECT(props->x), "changed",
G_CALLBACK(x_changed_cb), (gpointer) props);
gtk_widget_set_size_request(props->x, 64, -1);
create_label_in_table(table, 0, 2, _("pixels"));
label = create_label_in_table(table, 1, 0, "_y:");
props->y = create_spin_button_in_table(table, label, 1, 1, 1, 0,
max_height - 1);
gtk_signal_connect(GTK_OBJECT(props->y), "changed",
(GtkSignalFunc) y_changed_cb, (gpointer) props);
gtk_widget_set_usize(props->y, 64, -1);
g_signal_connect(G_OBJECT(props->y), "changed",
G_CALLBACK(y_changed_cb), (gpointer) props);
gtk_widget_set_size_request(props->y, 64, -1);
create_label_in_table(table, 1, 2, _("pixels"));
props->update = gtk_button_new_with_mnemonic(_("_Update"));
gtk_signal_connect(GTK_OBJECT(props->update), "clicked",
GTK_SIGNAL_FUNC(update_button_clicked), props);
g_signal_connect(G_OBJECT(props->update), "clicked",
G_CALLBACK(update_button_clicked), props);
gtk_table_attach_defaults(GTK_TABLE(table), props->update, 1, 2, 2, 3);
gtk_widget_show(props->update);
props->insert = gtk_button_new_with_mnemonic(_("_Insert"));
gtk_signal_connect(GTK_OBJECT(props->insert), "clicked",
GTK_SIGNAL_FUNC(insert_button_clicked), props);
g_signal_connect(G_OBJECT(props->insert), "clicked",
G_CALLBACK(insert_button_clicked), props);
gtk_table_attach_defaults(GTK_TABLE(table), props->insert, 1, 2, 3, 4);
gtk_widget_show(props->insert);
props->append = gtk_button_new_with_mnemonic(_("A_ppend"));
gtk_signal_connect(GTK_OBJECT(props->append), "clicked",
GTK_SIGNAL_FUNC(append_button_clicked), props);
g_signal_connect(G_OBJECT(props->append), "clicked",
G_CALLBACK(append_button_clicked), props);
gtk_table_attach_defaults(GTK_TABLE(table), props->append, 1, 2, 4, 5);
gtk_widget_show(props->append);
props->remove = gtk_button_new_with_mnemonic(_("_Remove"));
gtk_signal_connect(GTK_OBJECT(props->remove), "clicked",
GTK_SIGNAL_FUNC(remove_button_clicked), props);
g_signal_connect(G_OBJECT(props->remove), "clicked",
G_CALLBACK(remove_button_clicked), props);
gtk_table_attach_defaults(GTK_TABLE(table), props->remove, 1, 2, 5, 6);
gtk_widget_show(props->remove);
props->timeout = 0;
props->selection = gtk_tree_view_get_selection(GTK_TREE_VIEW (view));
gtk_tree_selection_set_mode(props->selection, GTK_SELECTION_SINGLE);
g_signal_connect (G_OBJECT (props->selection), "changed",
G_CALLBACK (select_row_cb), props);
return props;
}
static gint
static gboolean
update_timeout(gpointer data)
{
PolygonProperties_t *props = (PolygonProperties_t*) data;
@ -494,14 +560,16 @@ static void
polygon_update_info_widget(Object_t *obj, gpointer data)
{
PolygonProperties_t *props = (PolygonProperties_t*) data;
GtkTreeIter iter;
gtk_spin_button_set_value(GTK_SPIN_BUTTON(props->x), _sash_point->x);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(props->y), _sash_point->y);
if (props->selected_row != _sash_index) {
props->selected_row = _sash_index;
gtk_clist_select_row(GTK_CLIST(props->list), _sash_index, -1);
if (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(props->store), &iter,
NULL, _sash_index)) {
gtk_tree_selection_select_iter(props->selection, &iter);
}
if (props->timeout)
gtk_timeout_remove(props->timeout);
props->timeout = gtk_timeout_add(1000, update_timeout, data);
@ -512,25 +580,22 @@ polygon_fill_info_tab(Object_t *obj, gpointer data)
{
Polygon_t *polygon = ObjectToPolygon(obj);
PolygonProperties_t *props = (PolygonProperties_t*) data;
GtkTreeIter iter;
GList *p;
props->obj = obj;
gtk_clist_freeze(GTK_CLIST(props->list));
gtk_clist_clear(GTK_CLIST(props->list));
for (p = polygon->points; p; p = p->next) {
GdkPoint *point = (GdkPoint*) p->data;
char x[16], y[16];
char *text[2];
text[0] = x;
text[1] = y;
sprintf(x, "%d", point->x);
sprintf(y, "%d", point->y);
gtk_clist_append(GTK_CLIST(props->list), text);
gtk_list_store_clear(props->store);
for (p = polygon->points; p; p = p->next) {
gtk_list_store_append(props->store, &iter);
gtk_list_store_set(props->store, &iter, 0, p->data, -1);
}
gtk_clist_select_row(GTK_CLIST(props->list), _sash_index, -1);
gtk_clist_thaw(GTK_CLIST(props->list));
if (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(props->store), &iter,
NULL, _sash_index)) {
gtk_tree_selection_select_iter(props->selection, &iter);
}
set_buttons_sensitivity(props);
}
@ -544,25 +609,7 @@ polygon_set_initial_focus(Object_t *obj, gpointer data)
static void
polygon_update(Object_t* obj, gpointer data)
{
Polygon_t *polygon = ObjectToPolygon(obj);
PolygonProperties_t *props = (PolygonProperties_t*) data;
gint rows = GTK_CLIST(props->list)->rows;
int i;
g_list_free(polygon->points);
polygon->points = NULL;
for (i = 0; i < rows; i++) {
gchar *text;
GdkPoint *point = g_new(GdkPoint, 1);
gtk_clist_get_text(GTK_CLIST(props->list), i, 0, &text);
point->x = atoi(text);
gtk_clist_get_text(GTK_CLIST(props->list), i, 1, &text);
point->y = atoi(text);
polygon->points = g_list_append(polygon->points, point);
}
/* Nothing to be done! */
}
static void
@ -609,7 +656,7 @@ polygon_write_ncsa(Object_t *obj, gpointer param, OutputFunc_t output)
output(param, " %d,%d", first->x, first->y);
}
static gint _insert_edge;
static gboolean _insert_edge;
static gint _insert_x;
static gint _insert_y;
@ -645,7 +692,7 @@ point_near_edge(GdkPoint *first, GdkPoint *second, gint x, gint y)
gint sy = first->y + (gint) (u * (second->y - first->y)) - y;
return sx * sx + sy * sy <= 25; /* Fix me! */
}
return 0;
return FALSE;
}
static gint
@ -718,7 +765,7 @@ polygon_factory_finish(Object_t *obj, gint x, gint y)
polygon_remove_last_point(polygon);
return TRUE;
} else {
g_list_append(polygon->points, new_point(x, y));
polygon_append_point(polygon, x, y);
_prev_link = _prev_link->next;
}
return FALSE;
@ -795,3 +842,9 @@ new_point(gint x, gint y)
point->y = y;
return point;
}
void
polygon_append_point(Polygon_t *polygon, gint x, gint y)
{
polygon->points = g_list_append(polygon->points, new_point(x, y));
}

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-1999 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -35,7 +35,9 @@ typedef struct {
Object_t *create_polygon(GList *points);
ObjectFactory_t *get_polygon_factory(guint state);
void polygon_remove_last_point(Polygon_t *polygon);
void polygon_append_point(Polygon_t *polygon, gint x, gint y);
GdkPoint *new_point(gint x, gint y);
#endif /* _IMAP_POLYGON_H */

View File

@ -300,9 +300,9 @@ preview_expose(GtkWidget *widget, GdkEventExpose *event)
{
Preview_t *data = preview_user_data(widget);
gtk_signal_handler_block(GTK_OBJECT(widget), data->exp_id);
g_signal_handler_block(G_OBJECT(widget), data->exp_id);
gtk_widget_draw(widget, (event) ? &event->area : NULL);
gtk_signal_handler_unblock(GTK_OBJECT(widget), data->exp_id );
g_signal_handler_unblock(G_OBJECT(widget), data->exp_id );
draw_grid(widget);
draw_shapes(widget);
@ -349,7 +349,6 @@ preview_zoom(Preview_t *preview, gint zoom_factor)
{
gint pwidth = preview->width * zoom_factor;
gint pheight = preview->height * zoom_factor;
gtk_preview_size(GTK_PREVIEW(preview->preview), pwidth, pheight);
gtk_widget_queue_resize(preview->window);
render_preview(preview->preview, &preview->src_rgn);

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-1999 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -26,26 +26,16 @@
#include <stdarg.h>
#include <stdio.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include "imap_statusbar.h"
#include "coord.xpm"
#include "dimension.xpm"
#include "imap_stock.h"
StatusBar_t*
make_statusbar(GtkWidget *main_vbox, GtkWidget *window)
{
StatusBar_t *statusbar = g_new(StatusBar_t, 1);
GtkWidget *hbox, *iconw;
GdkPixmap *icon;
GdkBitmap *mask;
GtkStyle *style;
hbox = gtk_hbox_new(FALSE, 1);
gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, FALSE, 0);
@ -58,38 +48,35 @@ make_statusbar(GtkWidget *main_vbox, GtkWidget *window)
gtk_widget_show(statusbar->status);
/* (x, y) coordinate */
style = gtk_widget_get_style(window);
icon = gdk_pixmap_create_from_xpm_d(window->window, &mask,
&style->bg[GTK_STATE_NORMAL],
coord_xpm);
iconw = gtk_pixmap_new(icon, mask);
iconw = gtk_image_new_from_stock(IMAP_STOCK_COORD,
GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_box_pack_start(GTK_BOX(hbox), iconw, FALSE, FALSE, 10);
gtk_widget_show(iconw);
statusbar->xy = gtk_entry_new();
gtk_widget_set_usize(statusbar->xy, 64, -1);
gtk_entry_set_editable(GTK_ENTRY(statusbar->xy), FALSE);
gtk_widget_set_size_request(statusbar->xy, 96, -1);
gtk_editable_set_editable(GTK_EDITABLE(statusbar->xy), FALSE);
GTK_WIDGET_UNSET_FLAGS(statusbar->xy, GTK_CAN_FOCUS);
gtk_box_pack_start(GTK_BOX(hbox), statusbar->xy, FALSE, FALSE, 0);
gtk_widget_show(statusbar->xy);
/* Dimension info */
icon = gdk_pixmap_create_from_xpm_d(window->window, &mask,
&style->bg[GTK_STATE_NORMAL],
dimension_xpm);
iconw = gtk_pixmap_new(icon, mask);
iconw = gtk_image_new_from_stock(IMAP_STOCK_DIMENSION,
GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_box_pack_start(GTK_BOX(hbox), iconw, FALSE, FALSE, 10);
gtk_widget_show(iconw);
statusbar->dimension = gtk_entry_new();
gtk_widget_set_usize(statusbar->dimension, 64, -1);
gtk_entry_set_editable(GTK_ENTRY(statusbar->dimension), FALSE);
gtk_widget_set_size_request(statusbar->dimension, 96, -1);
gtk_editable_set_editable(GTK_EDITABLE(statusbar->dimension), FALSE);
GTK_WIDGET_UNSET_FLAGS(statusbar->dimension, GTK_CAN_FOCUS);
gtk_box_pack_start(GTK_BOX(hbox), statusbar->dimension, FALSE, FALSE, 0);
gtk_widget_show(statusbar->dimension);
/* Zoom info */
statusbar->zoom = gtk_statusbar_new();
gtk_widget_set_size_request(statusbar->zoom, 48, -1);
statusbar->zoom_id = gtk_statusbar_get_context_id(
GTK_STATUSBAR(statusbar->zoom), "zoom_status");
gtk_box_pack_start(GTK_BOX(hbox), statusbar->zoom, FALSE, FALSE, 5);

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-1999 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -27,18 +27,20 @@
#include "imap_stock.h"
#include "arrow.xpm"
#include "circle.xpm"
#include "coord.xpm"
#include "dimension.xpm"
#include "grid.xpm"
#include "map_info.xpm"
#include "polygon.xpm"
#include "rectangle.xpm"
#include "to_back.xpm"
#include "to_front.xpm"
#include "map_info.xpm"
#include "arrow.xpm"
#include "rectangle.xpm"
#include "circle.xpm"
#include "polygon.xpm"
#include "libgimp/stdplugins-intl.h"
static GtkStockItem imap_stock_items[] = {
static GtkStockItem imap_stock_items[] = {
{IMAP_STOCK_MAP_INFO, N_("Edit Map Info..."), 0, 0, "imap"},
{IMAP_STOCK_GRID, N_("Grid"), 0, 0, "imap"},
};
@ -47,8 +49,8 @@ static void
add_stock_icon(GtkIconFactory *factory, const gchar *stock_id,
const char **xpm_data)
{
GtkIconSet *icon_set;
GdkPixbuf *pixbuf;
GtkIconSet *icon_set;
GdkPixbuf *pixbuf;
pixbuf = gdk_pixbuf_new_from_xpm_data(xpm_data);
icon_set = gtk_icon_set_new_from_pixbuf(pixbuf);
@ -60,17 +62,19 @@ add_stock_icon(GtkIconFactory *factory, const gchar *stock_id,
void
init_stock_icons(void)
{
GtkIconFactory *factory = gtk_icon_factory_new();
GtkIconFactory *factory = gtk_icon_factory_new();
add_stock_icon(factory, IMAP_STOCK_ARROW, (const char**) arrow_xpm);
add_stock_icon(factory, IMAP_STOCK_CIRCLE, (const char**) circle_xpm);
add_stock_icon(factory, IMAP_STOCK_COORD, (const char**) coord_xpm);
add_stock_icon(factory, IMAP_STOCK_DIMENSION, (const char**) dimension_xpm);
add_stock_icon(factory, IMAP_STOCK_GRID, (const char**) grid_xpm);
add_stock_icon(factory, IMAP_STOCK_MAP_INFO, (const char**) map_info_xpm);
add_stock_icon(factory, IMAP_STOCK_POLYGON, (const char**) polygon_xpm);
add_stock_icon(factory, IMAP_STOCK_RECTANGLE, (const char**) rectangle_xpm);
add_stock_icon(factory, IMAP_STOCK_TO_BACK, (const char**) to_back_xpm);
add_stock_icon(factory, IMAP_STOCK_TO_FRONT, (const char**) to_front_xpm);
add_stock_icon(factory, IMAP_STOCK_MAP_INFO, (const char**) map_info_xpm);
add_stock_icon(factory, IMAP_STOCK_ARROW, (const char**) arrow_xpm);
add_stock_icon(factory, IMAP_STOCK_RECTANGLE, (const char**) rectangle_xpm);
add_stock_icon(factory, IMAP_STOCK_CIRCLE, (const char**) circle_xpm);
add_stock_icon(factory, IMAP_STOCK_POLYGON, (const char**) polygon_xpm);
add_stock_icon(factory, IMAP_STOCK_GRID, (const char**) grid_xpm);
gtk_icon_factory_add_default(factory);
gtk_stock_add_static(imap_stock_items, G_N_ELEMENTS(imap_stock_items));

View File

@ -3,7 +3,7 @@
*
* Generates clickable image maps.
*
* Copyright (C) 1998-2002 Maurits Rijk lpeek.mrijk@consunet.nl
* Copyright (C) 1998-2003 Maurits Rijk lpeek.mrijk@consunet.nl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -24,14 +24,16 @@
#ifndef _IMAP_STOCK_H
#define _IMAP_STOCK_H
#define IMAP_STOCK_MAP_INFO "imap-map-info"
#define IMAP_STOCK_TO_FRONT "imap-to-front"
#define IMAP_STOCK_TO_BACK "imap-to-back"
#define IMAP_STOCK_ARROW "imap_arrow"
#define IMAP_STOCK_RECTANGLE "imap_rectangle"
#define IMAP_STOCK_CIRCLE "imap_circle"
#define IMAP_STOCK_POLYGON "imap_polygon"
#define IMAP_STOCK_COORD "imap_coord"
#define IMAP_STOCK_DIMENSION "imap_dimension"
#define IMAP_STOCK_GRID "imap_grid"
#define IMAP_STOCK_MAP_INFO "imap-map-info"
#define IMAP_STOCK_POLYGON "imap_polygon"
#define IMAP_STOCK_RECTANGLE "imap_rectangle"
#define IMAP_STOCK_TO_BACK "imap-to-back"
#define IMAP_STOCK_TO_FRONT "imap-to-front"
void init_stock_icons(void);