imap_default_dialog.c 5.06 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
#include "imap_default_dialog.h"
Sven Neumann's avatar
Sven Neumann committed
30
#include "imap_main.h"
Sven Neumann's avatar
Sven Neumann committed
31

32

Sven Neumann's avatar
Sven Neumann committed
33
static void
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
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
59 60
}

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

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

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

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

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

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

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

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

109 110 111
   data->ok = gtk_dialog_add_button (GTK_DIALOG (data->dialog),
                                     GTK_STOCK_OK, GTK_RESPONSE_OK);

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

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

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

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

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

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

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

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

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

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

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

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

184 185
   return table;
}