File: msgbox.c

package info (click to toggle)
gcrontab 0.8.0-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,184 kB
  • ctags: 1,440
  • sloc: ansic: 6,240; sh: 5,526; makefile: 390; yacc: 318
file content (171 lines) | stat: -rw-r--r-- 6,174 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include "msgbox.h"  

static void
on_btn_default_clicked                 (GtkButton       *button,
                                        gpointer         user_data)
{
   gtk_widget_destroy(GTK_WIDGET(user_data));
}


GtkWidget* msgbox_new (char *win_title, char *title, char *msg, char *pixmap,int btnmsk)
{
  GtkWidget *win_msg;
  GtkWidget *vbox1;
  GtkWidget *box_title;
  GtkWidget *lbl_title;
  GtkWidget *hseparator1;
  GtkWidget *hbox1;
  GtkWidget *pixmap1;
  GtkWidget *lbl_msg;
  GtkWidget *hbuttonbox1;
  GtkWidget *btn_yes;
  GtkWidget *btn_no;
  GtkWidget *btn_cancel;

  win_msg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_object_set_data (GTK_OBJECT (win_msg), "win_msg", win_msg);
  gtk_container_set_border_width (GTK_CONTAINER (win_msg), 4);
  gtk_window_set_title (GTK_WINDOW (win_msg), win_title?_(win_title):_(""));
  gtk_window_set_default_size (GTK_WINDOW (win_msg), 510, 300);
  gtk_window_set_policy (GTK_WINDOW (win_msg), FALSE, FALSE, TRUE);

  vbox1 = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (vbox1);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "vbox1", vbox1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (vbox1);
  gtk_container_add (GTK_CONTAINER (win_msg), vbox1);

  box_title = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (box_title);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "box_title", box_title,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (box_title);
  gtk_box_pack_start (GTK_BOX (vbox1), box_title, FALSE, TRUE, 0);

  lbl_title = gtk_label_new (title?_("Title"):_(""));
  gtk_widget_ref (lbl_title);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "lbl_title", lbl_title,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lbl_title);
  gtk_box_pack_start (GTK_BOX (box_title), lbl_title, FALSE, FALSE, 0);

  hseparator1 = gtk_hseparator_new ();
  gtk_widget_ref (hseparator1);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "hseparator1", hseparator1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (hseparator1);
  gtk_box_pack_start (GTK_BOX (box_title), hseparator1, FALSE, TRUE, 0);

  if(!title) gtk_widget_hide (box_title);


  hbox1 = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (hbox1);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "hbox1", hbox1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (hbox1);
  gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
  gtk_container_set_border_width (GTK_CONTAINER (hbox1), 32);

  pixmap1 = create_pixmap (win_msg, pixmap);
  gtk_widget_ref (pixmap1);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "pixmap1", pixmap1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (pixmap1);
  gtk_box_pack_start (GTK_BOX (hbox1), pixmap1, FALSE, TRUE, 0);
  gtk_misc_set_padding (GTK_MISC (pixmap1), 10, 10);
  

  lbl_msg = gtk_label_new (_(msg));
  gtk_widget_ref (lbl_msg);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "lbl_msg", lbl_msg,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lbl_msg);
  gtk_box_pack_start (GTK_BOX (hbox1), lbl_msg, TRUE, TRUE, 0);

  hbuttonbox1 = gtk_hbutton_box_new ();
  gtk_widget_ref (hbuttonbox1);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "hbuttonbox1", hbuttonbox1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (hbuttonbox1);
  gtk_box_pack_start (GTK_BOX (vbox1), hbuttonbox1, FALSE, TRUE, 0);
  gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_SPREAD);
  
  btn_yes = gtk_button_new_with_label ((ACCEPT_BUTTON & btnmsk)?_("Accept"):_("Yes"));
  gtk_widget_ref (btn_yes);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "btn_yes", btn_yes,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (btn_yes);
  gtk_container_add (GTK_CONTAINER (hbuttonbox1), btn_yes);
  GTK_WIDGET_SET_FLAGS (btn_yes, GTK_CAN_DEFAULT);

  btn_no = gtk_button_new_with_label (_("No"));
  gtk_widget_ref (btn_no);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "btn_no", btn_no,
                            (GtkDestroyNotify) gtk_widget_unref);

  gtk_container_add (GTK_CONTAINER (hbuttonbox1), btn_no);
  GTK_WIDGET_SET_FLAGS (btn_no, GTK_CAN_DEFAULT);
  
  if( NO_BUTTON & btnmsk )  
    gtk_widget_show (btn_no);
  else
    gtk_widget_hide (btn_no);

  btn_cancel = gtk_button_new_with_label (_("Cancel"));
  gtk_widget_ref (btn_cancel);
  gtk_object_set_data_full (GTK_OBJECT (win_msg), "btn_cancel", btn_cancel,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (btn_cancel);
  gtk_container_add (GTK_CONTAINER (hbuttonbox1), btn_cancel);
  GTK_WIDGET_SET_FLAGS (btn_cancel, GTK_CAN_DEFAULT);
  
  if( CANCEL_BUTTON & btnmsk )  
    gtk_widget_show (btn_cancel);
  else
    gtk_widget_hide (btn_cancel);  

  gtk_signal_connect (GTK_OBJECT (btn_yes), "clicked",
                      GTK_SIGNAL_FUNC (on_btn_default_clicked),
                      win_msg);
  gtk_signal_connect (GTK_OBJECT (btn_no), "clicked",
                      GTK_SIGNAL_FUNC (on_btn_default_clicked),
                      win_msg);
  gtk_signal_connect (GTK_OBJECT (btn_cancel), "clicked",
                      GTK_SIGNAL_FUNC (on_btn_default_clicked),
                      win_msg);

  return win_msg;
}

void 
msgbox_button_signal_connect(GtkWidget *msgbox,int button,GtkSignalFunc btncb)
{
	GtkWidget *btn;
	switch(button)
		{
			case NO_BUTTON:btn=gtk_object_get_data(GTK_OBJECT(msgbox), "btn_no");
				           break;
			
            case CANCEL_BUTTON:btn=gtk_object_get_data(GTK_OBJECT(msgbox), "btn_cancel");	
				               break;
			default:
			   btn=gtk_object_get_data(GTK_OBJECT(msgbox), "btn_yes");						
		}
		
	
		g_print("%p!!!", btn);
		
    gtk_signal_disconnect_by_func(GTK_OBJECT(btn),GTK_SIGNAL_FUNC(on_btn_default_clicked),
                        msgbox);
    gtk_signal_connect (GTK_OBJECT (btn), "clicked",
		                GTK_SIGNAL_FUNC (btncb),
                        msgbox);
                      
}