1 /* Dialog and Message Boxes
2  *
3  * Dialog widgets are used to pop up a transient window for user feedback.
4  */
5 
6 using System;
7 using Gtk;
8 
9 namespace GtkDemo
10 {
11 	[Demo ("Dialog and Message Boxes", "DemoDialog.cs")]
12 	public class DemoDialog : Gtk.Window
13 	{
14 		private Entry entry1;
15 		private Entry entry2;
16 
DemoDialog()17 		public DemoDialog () : base ("Dialogs")
18 		{
19 			BorderWidth = 8;
20 
21 			Frame frame = new Frame ("Dialogs");
22 			Add (frame);
23 
24 			VBox vbox = new VBox (false, 8);
25 			vbox.BorderWidth = 8;
26 			frame.Add (vbox);
27 
28 			// Standard message dialog
29 			HBox hbox = new HBox (false,8);
30 			vbox.PackStart (hbox, false, false, 0);
31 			Button button = new Button ("_Message Dialog");
32 			button.Clicked += new EventHandler (MessageDialogClicked);
33 			hbox.PackStart (button, false, false, 0);
34 			vbox.PackStart (new HSeparator(), false, false, 0);
35 
36 			// Interactive dialog
37 			hbox = new HBox (false, 8);
38 			vbox.PackStart (hbox, false, false, 0);
39 			VBox vbox2 = new VBox (false, 0);
40 
41 			button = new Button ("_Interactive Dialog");
42 			button.Clicked += new EventHandler (InteractiveDialogClicked);
43 			hbox.PackStart (vbox2, false, false, 0);
44 			vbox2.PackStart (button, false, false, 0);
45 
46 			Table table = new Table (2, 2, false);
47 			table.RowSpacing = 4;
48 			table.ColumnSpacing = 4;
49 			hbox.PackStart (table, false, false, 0);
50 
51 			Label label = new Label ("_Entry1");
52 			table.Attach (label, 0, 1, 0, 1);
53 			entry1 = new Entry ();
54 			table.Attach (entry1, 1, 2, 0, 1);
55 			label.MnemonicWidget = entry1;
56 
57 			label = new Label ("E_ntry2");
58 			table.Attach (label,0,1,1,2);
59 			entry2 = new Entry ();
60 			table.Attach (entry2, 1, 2, 1, 2);
61 			label.MnemonicWidget = entry2;
62 
63 			ShowAll ();
64 		}
65 
OnDeleteEvent(Gdk.Event evt)66 		protected override bool OnDeleteEvent (Gdk.Event evt)
67 		{
68 			Destroy ();
69 			return true;
70 		}
71 
72 		private int i = 1;
MessageDialogClicked(object o, EventArgs args)73 		private void MessageDialogClicked (object o, EventArgs args)
74 		{
75 			using (Dialog dialog = new MessageDialog (this,
76 								  DialogFlags.Modal | DialogFlags.DestroyWithParent,
77 								  MessageType.Info,
78 								  ButtonsType.Ok,
79 								  "This message box has been popped up the following\nnumber of times:\n\n {0}",
80 								  i)) {
81 				dialog.Run ();
82 				dialog.Hide ();
83 			}
84 
85 			i++;
86 		}
87 
InteractiveDialogClicked(object o, EventArgs args)88 		private void InteractiveDialogClicked (object o, EventArgs args)
89 		{
90 			Dialog dialog = new Dialog ("Interactive Dialog", this,
91 						    DialogFlags.Modal | DialogFlags.DestroyWithParent,
92 						    Gtk.Stock.Ok, ResponseType.Ok,
93 						    "_Non-stock Button", ResponseType.Cancel);
94 
95 			HBox hbox = new HBox (false, 8);
96 			hbox.BorderWidth = 8;
97 			dialog.ContentArea.PackStart (hbox, false, false, 0);
98 
99 			Image stock = new Image (Stock.DialogQuestion, IconSize.Dialog);
100 			hbox.PackStart (stock, false, false, 0);
101 
102 			Table table = new Table (2, 2, false);
103 			table.RowSpacing = 4;
104 			table.ColumnSpacing = 4;
105 			hbox.PackStart (table, true, true, 0);
106 
107 			Label label = new Label ("_Entry1");
108 			table.Attach (label, 0, 1, 0, 1);
109 			Entry localEntry1 = new Entry ();
110 			localEntry1.Text = entry1.Text;
111 			table.Attach (localEntry1, 1, 2, 0, 1);
112 			label.MnemonicWidget = localEntry1;
113 
114 			label = new Label ("E_ntry2");
115 			table.Attach (label, 0, 1, 1, 2);
116 			Entry localEntry2 = new Entry ();
117 			localEntry2.Text = entry2.Text;
118 			table.Attach (localEntry2, 1, 2, 1, 2);
119 			label.MnemonicWidget = localEntry2;
120 
121 			hbox.ShowAll ();
122 
123 			ResponseType response = (ResponseType) dialog.Run ();
124 
125 			if (response == ResponseType.Ok) {
126 				entry1.Text = localEntry1.Text;
127 				entry2.Text = localEntry2.Text;
128 			}
129 
130 			dialog.Destroy ();
131 		}
132 	}
133 }
134