home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2002 April / pcpro0402.iso / essentials / graphics / Gimp / gimp-src-20001226.exe / src / gimp / plug-ins / imagemap / imap_default_dialog.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-08-20  |  5.6 KB  |  193 lines

  1. /*
  2.  * This is a plug-in for the GIMP.
  3.  *
  4.  * Generates clickable image maps.
  5.  *
  6.  * Copyright (C) 1998-2000 Maurits Rijk  lpeek.mrijk@consunet.nl
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  21.  *
  22.  */
  23.  
  24. #include "config.h"
  25.  
  26. #include "libgimp/gimpui.h"
  27. #include "libgimp/stdplugins-intl.h"
  28.  
  29. #include "imap_default_dialog.h"
  30.  
  31. static void
  32. dialog_cancel(GtkWidget *widget, gpointer data)
  33. {
  34.    DefaultDialog_t *dialog = (DefaultDialog_t*) data;
  35.    gtk_widget_hide(dialog->dialog);
  36.    if (dialog->cancel_cb)
  37.       dialog->cancel_cb(dialog->cancel_cb_data);
  38. }
  39.  
  40. static void
  41. dialog_destroy(GtkWidget *widget, GdkEvent *event, gpointer data)
  42. {
  43.    dialog_cancel(widget, data);
  44. }
  45.  
  46. static void
  47. dialog_apply(GtkWidget *widget, gpointer data)
  48. {
  49.    DefaultDialog_t *dialog = (DefaultDialog_t*) data;
  50.    if (dialog->apply_cb)
  51.       dialog->apply_cb(dialog->apply_cb_data);
  52.    else if (dialog->ok_cb)
  53.       dialog->ok_cb(dialog->ok_cb_data);
  54. }
  55.  
  56. static void
  57. dialog_ok(GtkWidget *widget, gpointer data)
  58. {
  59.    DefaultDialog_t *dialog = (DefaultDialog_t*) data;
  60.    gtk_widget_hide(dialog->dialog);
  61.    if (dialog->ok_cb)
  62.       dialog->ok_cb(dialog->ok_cb_data);
  63. }
  64.  
  65. void 
  66. default_dialog_set_ok_cb(DefaultDialog_t *dialog, void (*ok_cb)(gpointer), 
  67.              gpointer ok_cb_data)
  68. {
  69.    dialog->ok_cb = ok_cb;
  70.    dialog->ok_cb_data = ok_cb_data;
  71. }
  72.  
  73. void 
  74. default_dialog_set_apply_cb(DefaultDialog_t *dialog, 
  75.                 void (*apply_cb)(gpointer), 
  76.                 gpointer apply_cb_data)
  77. {
  78.    dialog->apply_cb = apply_cb;
  79.    dialog->apply_cb_data = apply_cb_data;
  80. }
  81.  
  82. void 
  83. default_dialog_set_cancel_cb(DefaultDialog_t *dialog, 
  84.                  void (*cancel_cb)(gpointer), 
  85.                  gpointer cancel_cb_data)
  86. {
  87.    dialog->cancel_cb = cancel_cb;
  88.    dialog->cancel_cb_data = cancel_cb_data;
  89. }
  90.  
  91. DefaultDialog_t*
  92. make_default_dialog(const gchar *title)
  93. {
  94.    DefaultDialog_t *data = (DefaultDialog_t*) g_new(DefaultDialog_t, 1);
  95.    GtkWidget *dialog, *hbbox;
  96.  
  97.    data->ok_cb = NULL;
  98.    data->apply_cb = NULL;
  99.    data->cancel_cb = NULL;
  100.    data->dialog = dialog = gtk_dialog_new();
  101.    gtk_window_set_title(GTK_WINDOW(dialog), title);
  102.    gimp_dialog_set_icon (GTK_WINDOW(dialog));
  103.  
  104.    gtk_signal_connect(GTK_OBJECT(dialog), "delete_event",
  105.               GTK_SIGNAL_FUNC(dialog_destroy), (gpointer) data);
  106.  
  107.    /*  Action area  */
  108.    gtk_container_set_border_width(GTK_CONTAINER(
  109.       GTK_DIALOG(dialog)->action_area), 2);
  110.    gtk_box_set_homogeneous(GTK_BOX(GTK_DIALOG(dialog)->action_area), FALSE);
  111.    hbbox = gtk_hbutton_box_new();
  112.    gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbbox), 4);
  113.    gtk_box_pack_end(GTK_BOX(GTK_DIALOG(dialog)->action_area), hbbox, FALSE, 
  114.             FALSE, 0);
  115.    gtk_widget_show (hbbox);
  116.  
  117.    data->ok = gtk_button_new_with_label(_("OK"));
  118.    GTK_WIDGET_SET_FLAGS(data->ok, GTK_CAN_DEFAULT);
  119.    gtk_signal_connect(GTK_OBJECT(data->ok), "clicked",
  120.               GTK_SIGNAL_FUNC(dialog_ok), (gpointer) data);
  121.    gtk_box_pack_start(GTK_BOX(hbbox), data->ok, FALSE, FALSE, 0);
  122.    gtk_widget_grab_default(data->ok);
  123.    gtk_widget_show(data->ok);
  124.  
  125.    data->apply = gtk_button_new_with_label(_("Apply"));
  126.    GTK_WIDGET_SET_FLAGS(data->apply, GTK_CAN_DEFAULT);
  127.    gtk_signal_connect(GTK_OBJECT(data->apply), "clicked",
  128.               GTK_SIGNAL_FUNC(dialog_apply), (gpointer) data);
  129.    gtk_box_pack_start(GTK_BOX(hbbox), data->apply, FALSE, FALSE, 0);
  130.    gtk_widget_show(data->apply);
  131.  
  132.    data->cancel = gtk_button_new_with_label(_("Cancel"));
  133.    GTK_WIDGET_SET_FLAGS(data->cancel, GTK_CAN_DEFAULT);
  134.    gtk_signal_connect(GTK_OBJECT(data->cancel), "clicked",
  135.               GTK_SIGNAL_FUNC(dialog_cancel), (gpointer) data);
  136.    gtk_box_pack_start(GTK_BOX(hbbox), data->cancel, FALSE, FALSE, 0);
  137.    gtk_widget_show(data->cancel);
  138.  
  139.    data->help = gtk_button_new_with_label(_("Help..."));
  140.   /* Fix me: no action yet
  141.      GTK_WIDGET_SET_FLAGS(data->help, GTK_CAN_DEFAULT);
  142.      gtk_box_pack_start(GTK_BOX(hbbox), data->help, FALSE, FALSE, 0);
  143.      gtk_widget_show(data->help);
  144.    */
  145.  
  146.    return data;
  147. }
  148.  
  149. void 
  150. default_dialog_show(DefaultDialog_t *dialog)
  151. {
  152.    gtk_widget_show(dialog->dialog);
  153. }
  154.  
  155. void 
  156. default_dialog_hide_cancel_button(DefaultDialog_t *dialog)
  157. {
  158.    gtk_widget_hide(dialog->cancel);
  159. }
  160.  
  161. void 
  162. default_dialog_hide_apply_button(DefaultDialog_t *dialog)
  163. {
  164.    gtk_widget_hide(dialog->apply);
  165. }
  166.  
  167. void 
  168. default_dialog_hide_help_button(DefaultDialog_t *dialog)
  169. {
  170.    gtk_widget_hide(dialog->help);
  171. }
  172.  
  173. void
  174. default_dialog_set_title(DefaultDialog_t *dialog, const gchar *title)
  175. {
  176.    gtk_window_set_title(GTK_WINDOW(dialog->dialog), title);
  177. }
  178.  
  179. void 
  180. default_dialog_set_ok_sensitivity(DefaultDialog_t *dialog, gint sensitive)
  181. {
  182.    gtk_widget_set_sensitive(dialog->ok, sensitive);
  183. }
  184.  
  185. void
  186. default_dialog_set_label(DefaultDialog_t *dialog, gchar *text)
  187. {
  188.    GtkWidget *label = gtk_label_new(text);
  189.    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog->dialog)->vbox), label, 
  190.               TRUE, TRUE, 10);
  191.    gtk_widget_show(label);
  192. }
  193.