imap_default_dialog.c 5.09 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.
 *
 */

SHIRASAKI Yasuhiro's avatar
SHIRASAKI Yasuhiro committed
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
   gtk_dialog_set_alternative_button_order (GTK_DIALOG (data->dialog),
112 113 114 115 116
                                            GTK_RESPONSE_OK,
                                            GTK_RESPONSE_APPLY,
                                            GTK_RESPONSE_CANCEL,
                                            -1);

117
   gimp_window_set_transient (GTK_WINDOW (data->dialog));
118

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

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

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

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

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

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

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

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

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

179 180
   gtk_table_set_row_spacings(GTK_TABLE(table), 6);
   gtk_table_set_col_spacings(GTK_TABLE(table), 6);
181 182

   gtk_container_add (GTK_CONTAINER(dialog->vbox), table);
183
   gtk_widget_show(table);
184

185 186
   return table;
}