123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- (* Dialog and Message Boxes
- *
- * Dialog widgets are used to pop up a transient window for user feedback.
- *)
- var
- dialog_entry1,
- dialog_entry2,
- dialog_window : PGtkWidget;
- dialog_i : gint;
- procedure message_dialog_clicked (button : PGtkButton;
- user_data : gpointer);
- var
- dialog : PGtkWidget;
- begin
- dialog := gtk_message_dialog_new (GTK_WINDOW (dialog_window),
- GTK_DIALOG_MODAL or GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_OK,
- 'This message box has been popped up the following'#13#10+
- 'number of times:'#13#10#13#10+
- '%d', [dialog_i]);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- inc(dialog_i);
- end;
- procedure interactive_dialog_clicked ( button : PGtkButton;
- user_data : gpointer);
- var
- dialog,
- hbox,
- stock,
- table,
- local_entry1,
- local_entry2,
- thelabel : PGtkWidget;
- response : gint;
- begin
- dialog := gtk_dialog_new_with_buttons ('Interactive Dialog',
- GTK_WINDOW (dialog_window),
- GTK_DIALOG_MODAL or
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_OK,
- [ GTK_RESPONSE_OK,
- '_Non-stock Button',
- GTK_RESPONSE_CANCEL,
- NULL]);
- hbox := gtk_hbox_new (FALSE, 8);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)^.vbox), hbox, FALSE, FALSE, 0);
- stock := gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox), stock, FALSE, FALSE, 0);
- table := gtk_table_new (2, 2, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 4);
- gtk_table_set_col_spacings (GTK_TABLE (table), 4);
- gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0);
- thelabel := gtk_label_new_with_mnemonic ('_Entry 1');
- gtk_table_attach_defaults (GTK_TABLE (table),
- thelabel,
- 0, 1, 0, 1);
- local_entry1 := gtk_entry_new ();
- gtk_entry_set_text (GTK_ENTRY (local_entry1), gtk_entry_get_text (GTK_ENTRY (dialog_entry1)));
- gtk_table_attach_defaults (GTK_TABLE (table), local_entry1, 1, 2, 0, 1);
- gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), local_entry1);
- thelabel := gtk_label_new_with_mnemonic ('E_ntry 2');
- gtk_table_attach_defaults (GTK_TABLE (table),
- thelabel,
- 0, 1, 1, 2);
- local_entry2 := gtk_entry_new ();
- gtk_entry_set_text (GTK_ENTRY (local_entry2), gtk_entry_get_text (GTK_ENTRY (dialog_entry2)));
- gtk_table_attach_defaults (GTK_TABLE (table), local_entry2, 1, 2, 1, 2);
- gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), local_entry2);
- gtk_widget_show_all (hbox);
- response := gtk_dialog_run (GTK_DIALOG (dialog));
- if response = GTK_RESPONSE_OK then
- begin
- gtk_entry_set_text (GTK_ENTRY (dialog_entry1), gtk_entry_get_text (GTK_ENTRY (local_entry1)));
- gtk_entry_set_text (GTK_ENTRY (dialog_entry2), gtk_entry_get_text (GTK_ENTRY (local_entry2)));
- end;
- gtk_widget_destroy (dialog);
- end;
- function do_dialog : PGtkWidget;
- var
- frame,
- vbox,
- vbox2,
- hbox,
- button,
- table,
- thelabel : PGtkWidget;
- begin
- dialog_i := 1;
- if dialog_window = NULL then
- begin
- dialog_window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (dialog_window), 'Dialogs');
- g_signal_connect (dialog_window, 'destroy', G_CALLBACK (@gtk_widget_destroyed), @dialog_window);
- gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 8);
- frame := gtk_frame_new ('Dialogs');
- gtk_container_add (GTK_CONTAINER (dialog_window), frame);
- vbox := gtk_vbox_new (FALSE, 8);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
- gtk_container_add (GTK_CONTAINER (frame), vbox);
- (* Standard message dialog *)
- hbox := gtk_hbox_new (FALSE, 8);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- button := gtk_button_new_with_mnemonic ('_Message Dialog');
- g_signal_connect (button, 'clicked',
- G_CALLBACK (@message_dialog_clicked), @dialog_window);
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, FALSE, 0);
- (* Interactive dialog*)
- hbox := gtk_hbox_new (FALSE, 8);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- vbox2 := gtk_vbox_new (FALSE, 0);
- button := gtk_button_new_with_mnemonic ('_Interactive Dialog');
- g_signal_connect (button, 'clicked',
- G_CALLBACK (@interactive_dialog_clicked), @dialog_window);
- gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
- table := gtk_table_new (2, 2, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 4);
- gtk_table_set_col_spacings (GTK_TABLE (table), 4);
- gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
- thelabel := gtk_label_new_with_mnemonic ('_Entry 1');
- gtk_table_attach_defaults (GTK_TABLE (table),
- thelabel,
- 0, 1, 0, 1);
- dialog_entry1 := gtk_entry_new ();
- gtk_table_attach_defaults (GTK_TABLE (table), dialog_entry1, 1, 2, 0, 1);
- gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), dialog_entry1);
- thelabel := gtk_label_new_with_mnemonic ('E_ntry 2');
- gtk_table_attach_defaults (GTK_TABLE (table),
- thelabel,
- 0, 1, 1, 2);
- dialog_entry2 := gtk_entry_new ();
- gtk_table_attach_defaults (GTK_TABLE (table), dialog_entry2, 1, 2, 1, 2);
- gtk_label_set_mnemonic_widget (GTK_LABEL (thelabel), dialog_entry2);
- end;
- if not GTK_WIDGET_VISIBLE (dialog_window) then
- gtk_widget_show_all (dialog_window)
- else begin
- gtk_widget_destroy (dialog_window);
- dialog_window := NULL;
- end;
- do_dialog := dialog_window;
- end;
|