imap_default_dialog.c 5 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
   data->ok = gtk_dialog_add_button (GTK_DIALOG (data->dialog),
                                     GTK_STOCK_OK, GTK_RESPONSE_OK);

111 112 113 114 115 116
   gtk_dialog_set_alternative_button_order (GTK_DIALOG (data->dialog),
                                              GTK_RESPONSE_OK,
					      GTK_RESPONSE_APPLY,
                                              GTK_RESPONSE_CANCEL,
                                              -1);

117 118 119 120 121 122
   g_signal_connect (data->dialog, "response",
                     G_CALLBACK (dialog_response),
                     data);
   g_signal_connect (data->dialog, "destroy",
		     G_CALLBACK (gtk_widget_destroyed),
                     &data->dialog);
123

124 125 126 127 128 129
   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
130 131 132
   return data;
}

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

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

145
void
Sven Neumann's avatar
Sven Neumann committed
146 147
default_dialog_hide_apply_button(DefaultDialog_t *dialog)
{
148
  gtk_widget_hide(dialog->apply);
Sven Neumann's avatar
Sven Neumann committed
149 150
}

151
void
152 153
default_dialog_hide_help_button(DefaultDialog_t *dialog)
{
154
  /* gtk_widget_hide(dialog->help); */
155 156
}

Sven Neumann's avatar
Sven Neumann committed
157 158 159 160 161 162 163 164 165 166
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);
167 168

   gtk_box_pack_start (GTK_BOX (dialog->vbox), label, TRUE, TRUE, 0);
Sven Neumann's avatar
Sven Neumann committed
169 170
   gtk_widget_show(label);
}
171 172 173 174 175

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

177 178
   gtk_table_set_row_spacings(GTK_TABLE(table), 6);
   gtk_table_set_col_spacings(GTK_TABLE(table), 6);
179 180

   gtk_container_add (GTK_CONTAINER(dialog->vbox), table);
181
   gtk_widget_show(table);
182

183 184
   return table;
}