home *** CD-ROM | disk | FTP | other *** search
/ Freelog 65 / Freelog065.iso / BAS / Bureautique / Gnumeric / gnumeric-1.3.92-rc1.exe / dialog.c < prev    next >
C/C++ Source or Header  |  2004-10-15  |  6KB  |  182 lines

  1. /* Dialog and Message Boxes
  2.  *
  3.  * Dialog widgets are used to pop up a transient window for user feedback.
  4.  */
  5.  
  6. #include <config.h>
  7. #include <gtk/gtk.h>
  8.  
  9. static GtkWidget *window = NULL;
  10. static GtkWidget *entry1 = NULL;
  11. static GtkWidget *entry2 = NULL;
  12.  
  13. static void
  14. message_dialog_clicked (GtkButton *button,
  15.             gpointer   user_data)
  16. {
  17.   GtkWidget *dialog;
  18.   static gint i = 1;
  19.  
  20.   dialog = gtk_message_dialog_new (GTK_WINDOW (window),
  21.                    GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
  22.                    GTK_MESSAGE_INFO,
  23.                    GTK_BUTTONS_OK,
  24.                    "This message box has been popped up the following\n"
  25.                    "number of times:\n\n"
  26.                    "%d", i);
  27.   gtk_dialog_run (GTK_DIALOG (dialog));
  28.   gtk_widget_destroy (dialog);
  29.   i++;
  30. }
  31.  
  32. static void
  33. interactive_dialog_clicked (GtkButton *button,
  34.                 gpointer   user_data)
  35. {
  36.   GtkWidget *dialog;
  37.   GtkWidget *hbox;
  38.   GtkWidget *stock;
  39.   GtkWidget *table;
  40.   GtkWidget *local_entry1;
  41.   GtkWidget *local_entry2;
  42.   GtkWidget *label;
  43.   gint response;
  44.  
  45.   dialog = gtk_dialog_new_with_buttons ("Interactive Dialog",
  46.                     GTK_WINDOW (window),
  47.                     GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
  48.                     GTK_STOCK_OK,
  49.                     GTK_RESPONSE_OK,
  50.                                         "_Non-stock Button",
  51.                                         GTK_RESPONSE_CANCEL,
  52.                     NULL);
  53.  
  54.   hbox = gtk_hbox_new (FALSE, 8);
  55.   gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
  56.   gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 0);
  57.  
  58.   stock = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
  59.   gtk_box_pack_start (GTK_BOX (hbox), stock, FALSE, FALSE, 0);
  60.  
  61.   table = gtk_table_new (2, 2, FALSE);
  62.   gtk_table_set_row_spacings (GTK_TABLE (table), 4);
  63.   gtk_table_set_col_spacings (GTK_TABLE (table), 4);
  64.   gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0);
  65.   label = gtk_label_new_with_mnemonic ("_Entry 1");
  66.   gtk_table_attach_defaults (GTK_TABLE (table),
  67.                  label,
  68.                  0, 1, 0, 1);
  69.   local_entry1 = gtk_entry_new ();
  70.   gtk_entry_set_text (GTK_ENTRY (local_entry1), gtk_entry_get_text (GTK_ENTRY (entry1)));
  71.   gtk_table_attach_defaults (GTK_TABLE (table), local_entry1, 1, 2, 0, 1);
  72.   gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry1);
  73.  
  74.   label = gtk_label_new_with_mnemonic ("E_ntry 2");
  75.   gtk_table_attach_defaults (GTK_TABLE (table),
  76.                  label,
  77.                  0, 1, 1, 2);
  78.  
  79.   local_entry2 = gtk_entry_new ();
  80.   gtk_entry_set_text (GTK_ENTRY (local_entry2), gtk_entry_get_text (GTK_ENTRY (entry2)));
  81.   gtk_table_attach_defaults (GTK_TABLE (table), local_entry2, 1, 2, 1, 2);
  82.   gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry2);
  83.   
  84.   gtk_widget_show_all (hbox);
  85.   response = gtk_dialog_run (GTK_DIALOG (dialog));
  86.  
  87.   if (response == GTK_RESPONSE_OK)
  88.     {
  89.       gtk_entry_set_text (GTK_ENTRY (entry1), gtk_entry_get_text (GTK_ENTRY (local_entry1)));
  90.       gtk_entry_set_text (GTK_ENTRY (entry2), gtk_entry_get_text (GTK_ENTRY (local_entry2)));
  91.     }
  92.  
  93.   gtk_widget_destroy (dialog);
  94. }
  95.  
  96. GtkWidget *
  97. do_dialog (GtkWidget *do_widget)
  98. {
  99.   GtkWidget *frame;
  100.   GtkWidget *vbox;
  101.   GtkWidget *vbox2;
  102.   GtkWidget *hbox;
  103.   GtkWidget *button;
  104.   GtkWidget *table;
  105.   GtkWidget *label;
  106.   
  107.   if (!window)
  108.     {
  109.       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  110.       gtk_window_set_screen (GTK_WINDOW (window),
  111.                  gtk_widget_get_screen (do_widget));
  112.       gtk_window_set_title (GTK_WINDOW (window), "Dialogs");
  113.  
  114.       g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
  115.       gtk_container_set_border_width (GTK_CONTAINER (window), 8);
  116.  
  117.       frame = gtk_frame_new ("Dialogs");
  118.       gtk_container_add (GTK_CONTAINER (window), frame);
  119.  
  120.       vbox = gtk_vbox_new (FALSE, 8);
  121.       gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
  122.       gtk_container_add (GTK_CONTAINER (frame), vbox);
  123.  
  124.       /* Standard message dialog */
  125.       hbox = gtk_hbox_new (FALSE, 8);
  126.       gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
  127.       button = gtk_button_new_with_mnemonic ("_Message Dialog");
  128.       g_signal_connect (button, "clicked",
  129.             G_CALLBACK (message_dialog_clicked), NULL);
  130.       gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
  131.  
  132.       gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, FALSE, 0);
  133.  
  134.       /* Interactive dialog*/
  135.       hbox = gtk_hbox_new (FALSE, 8);
  136.       gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
  137.       vbox2 = gtk_vbox_new (FALSE, 0);
  138.  
  139.       button = gtk_button_new_with_mnemonic ("_Interactive Dialog");
  140.       g_signal_connect (button, "clicked",
  141.             G_CALLBACK (interactive_dialog_clicked), NULL);
  142.       gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
  143.       gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
  144.  
  145.       table = gtk_table_new (2, 2, FALSE);
  146.       gtk_table_set_row_spacings (GTK_TABLE (table), 4);
  147.       gtk_table_set_col_spacings (GTK_TABLE (table), 4);
  148.       gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
  149.  
  150.       label = gtk_label_new_with_mnemonic ("_Entry 1");
  151.       gtk_table_attach_defaults (GTK_TABLE (table),
  152.                  label,
  153.                  0, 1, 0, 1);
  154.  
  155.       entry1 = gtk_entry_new ();
  156.       gtk_table_attach_defaults (GTK_TABLE (table), entry1, 1, 2, 0, 1);
  157.       gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry1);
  158.  
  159.       label = gtk_label_new_with_mnemonic ("E_ntry 2");
  160.       
  161.       gtk_table_attach_defaults (GTK_TABLE (table),
  162.                  label,
  163.                  0, 1, 1, 2);
  164.  
  165.       entry2 = gtk_entry_new ();
  166.       gtk_table_attach_defaults (GTK_TABLE (table), entry2, 1, 2, 1, 2);
  167.       gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry2);
  168.     }
  169.  
  170.   if (!GTK_WIDGET_VISIBLE (window))
  171.     {
  172.       gtk_widget_show_all (window);
  173.     }
  174.   else
  175.     {     
  176.       gtk_widget_destroy (window);
  177.       window = NULL;
  178.     }
  179.  
  180.   return window;
  181. }
  182.