imap_default_dialog.c 4.95 KB
Newer Older
Sven Neumann's avatar
Sven Neumann committed
1
/*
2
 * This is a plug-in for GIMP.
Sven Neumann's avatar
Sven Neumann committed
3 4 5
 *
 * 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, PLUG_IN_BINARY,
Sven Neumann's avatar
Sven Neumann committed
97
                                   get_dialog(), 0,
98
                                   gimp_standard_help_func, PLUG_IN_PROC,
99
                                   NULL);
Sven Neumann's avatar
Sven Neumann committed
100

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

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

107 108 109
   data->ok = gtk_dialog_add_button (GTK_DIALOG (data->dialog),
                                     GTK_STOCK_OK, GTK_RESPONSE_OK);

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

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

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

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

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

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

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

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

void
163
default_dialog_set_label(DefaultDialog_t *dialog, const gchar *text)
Sven Neumann's avatar
Sven Neumann committed
164 165
{
   GtkWidget *label = gtk_label_new(text);
166 167

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

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

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

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

182 183
   return table;
}