imap_default_dialog.c 4.73 KB
Newer Older
Sven Neumann's avatar
Sven Neumann committed
1 2 3 4 5
/*
 * This is a plug-in for the GIMP.
 *
 * Generates clickable image maps.
 *
6
 * Copyright (C) 1998-2002 Maurits Rijk  lpeek.mrijk@consunet.nl
Sven Neumann's avatar
Sven Neumann committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 *
 * 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
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 */

24
#include "config.h"
25

26 27
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
28

Sven Neumann's avatar
Sven Neumann committed
29 30
#include "imap_default_dialog.h"

31

Sven Neumann's avatar
Sven Neumann committed
32
static void
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
dialog_response (GtkWidget       *widget,
                 gint             response_id,
                 DefaultDialog_t *dialog)
{
  switch (response_id)
    {
    case GTK_RESPONSE_APPLY:
      if (dialog->apply_cb)
        dialog->apply_cb (dialog->apply_cb_data);
      else if (dialog->ok_cb)
        dialog->ok_cb (dialog->ok_cb_data);
      break;

    case GTK_RESPONSE_OK:
      gtk_widget_hide (dialog->dialog);
      if (dialog->ok_cb)
        dialog->ok_cb (dialog->ok_cb_data);
      break;

    default:
      gtk_widget_hide (dialog->dialog);
      if (dialog->cancel_cb)
        dialog->cancel_cb (dialog->cancel_cb_data);
      break;
    }
Sven Neumann's avatar
Sven Neumann committed
58 59
}

60 61
void
default_dialog_set_ok_cb(DefaultDialog_t *dialog, void (*ok_cb)(gpointer),
Sven Neumann's avatar
Sven Neumann committed
62 63 64 65 66 67
			 gpointer ok_cb_data)
{
   dialog->ok_cb = ok_cb;
   dialog->ok_cb_data = ok_cb_data;
}

68 69 70
void
default_dialog_set_apply_cb(DefaultDialog_t *dialog,
			    void (*apply_cb)(gpointer),
71 72 73 74 75 76
			    gpointer apply_cb_data)
{
   dialog->apply_cb = apply_cb;
   dialog->apply_cb_data = apply_cb_data;
}

77 78 79
void
default_dialog_set_cancel_cb(DefaultDialog_t *dialog,
			     void (*cancel_cb)(gpointer),
Sven Neumann's avatar
Sven Neumann committed
80 81 82 83 84 85
			     gpointer cancel_cb_data)
{
   dialog->cancel_cb = cancel_cb;
   dialog->cancel_cb_data = cancel_cb_data;
}

86 87
DefaultDialog_t *
make_default_dialog (const gchar *title)
Sven Neumann's avatar
Sven Neumann committed
88
{
89
   DefaultDialog_t *data = g_new0 (DefaultDialog_t, 1);
Sven Neumann's avatar
Sven Neumann committed
90 91

   data->ok_cb = NULL;
92
   data->apply_cb = NULL;
Sven Neumann's avatar
Sven Neumann committed
93
   data->cancel_cb = NULL;
94

95 96
   data->dialog = gimp_dialog_new (title, "imagemap",
                                   NULL, 0,
97 98 99
                                   /* gimp_standard_help_func,
                                      "plug-in-imagemap", */
                                   gimp_standard_help_func, NULL,
100
                                   NULL);
Sven Neumann's avatar
Sven Neumann committed
101

102 103
   data->apply = gtk_dialog_add_button (GTK_DIALOG (data->dialog),
                                        GTK_STOCK_APPLY, GTK_RESPONSE_APPLY);
104

105 106
   data->cancel = gtk_dialog_add_button (GTK_DIALOG (data->dialog),
                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
107

108 109 110 111 112 113 114 115 116
   data->ok = gtk_dialog_add_button (GTK_DIALOG (data->dialog),
                                     GTK_STOCK_OK, GTK_RESPONSE_OK);

   g_signal_connect (data->dialog, "response",
                     G_CALLBACK (dialog_response),
                     data);
   g_signal_connect (data->dialog, "destroy",
		     G_CALLBACK (gtk_widget_destroyed),
                     &data->dialog);
117

118 119 120 121 122 123
   data->vbox = gtk_vbox_new (FALSE, 12);
   gtk_container_set_border_width (GTK_CONTAINER (data->vbox), 12);
   gtk_box_pack_start (GTK_BOX (GTK_DIALOG (data->dialog)->vbox), data->vbox,
                       TRUE, TRUE, 0);
   gtk_widget_show (data->vbox);

Sven Neumann's avatar
Sven Neumann committed
124 125 126
   return data;
}

127
void
Sven Neumann's avatar
Sven Neumann committed
128 129 130 131 132
default_dialog_show(DefaultDialog_t *dialog)
{
   gtk_widget_show(dialog->dialog);
}

133
void
Sven Neumann's avatar
Sven Neumann committed
134 135
default_dialog_hide_cancel_button(DefaultDialog_t *dialog)
{
136
  gtk_widget_hide(dialog->cancel);
Sven Neumann's avatar
Sven Neumann committed
137 138
}

139
void
Sven Neumann's avatar
Sven Neumann committed
140 141
default_dialog_hide_apply_button(DefaultDialog_t *dialog)
{
142
  gtk_widget_hide(dialog->apply);
Sven Neumann's avatar
Sven Neumann committed
143 144
}

145
void
146 147
default_dialog_hide_help_button(DefaultDialog_t *dialog)
{
148
  /* gtk_widget_hide(dialog->help); */
149 150
}

Sven Neumann's avatar
Sven Neumann committed
151 152 153 154 155 156 157 158 159 160
void
default_dialog_set_title(DefaultDialog_t *dialog, const gchar *title)
{
   gtk_window_set_title(GTK_WINDOW(dialog->dialog), title);
}

void
default_dialog_set_label(DefaultDialog_t *dialog, gchar *text)
{
   GtkWidget *label = gtk_label_new(text);
161 162

   gtk_box_pack_start (GTK_BOX (dialog->vbox), label, TRUE, TRUE, 0);
Sven Neumann's avatar
Sven Neumann committed
163 164
   gtk_widget_show(label);
}
165 166 167 168 169

GtkWidget*
default_dialog_add_table(DefaultDialog_t *dialog, gint rows, gint cols)
{
   GtkWidget *table = gtk_table_new(rows, cols, FALSE);
170

171 172
   gtk_table_set_row_spacings(GTK_TABLE(table), 6);
   gtk_table_set_col_spacings(GTK_TABLE(table), 6);
173 174

   gtk_container_add (GTK_CONTAINER(dialog->vbox), table);
175
   gtk_widget_show(table);
176

177 178
   return table;
}