mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-03 04:53:46 +02:00
190 lines
6.4 KiB
PHP
190 lines
6.4 KiB
PHP
(* 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;
|
|
|
|
|