wmclockmon: replace deprecated `GtkCombo`
[dockapps.git] / wmclockmon / wmclockmon-config / edit.c
blobc1a774f18d0f6952f0496c962484702b4042225e
1 /*
2 * edit.c
3 */
5 #include <gtk/gtk.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <strings.h>
10 #include "defines.h"
11 #include "tools.h"
12 #include "edit.h"
14 char *newalarm;
16 static GtkWidget *wid_status;
17 static GtkWidget *wid_time;
18 static GtkWidget *wid_date;
19 static GtkWidget *wid_mesg;
21 void set_data(GtkWidget *widget UNUSED, GtkWidget *data UNUSED) {
23 const char *wstat = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(wid_status));
24 const char *wtime = gtk_entry_get_text(GTK_ENTRY(wid_time));
25 const char *wdate = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(wid_date));
26 const char *wmesg = gtk_entry_get_text(GTK_ENTRY(wid_mesg));
28 int has_day = (strcmp(wdate, "ALL") != 0);
29 int has_msg = (strcmp(wdate, "") != 0);
30 int len = strlen(wstat) + 1 + strlen(wtime) + 1;
32 len += has_day ? strlen(wdate) + 1 : 0;
33 len += has_msg ? strlen(wmesg) + 1 : 0;
34 newalarm = xmalloc(len);
36 sprintf(newalarm, "%s@%s%s%s%s%s",
37 wstat,
38 wtime,
39 has_day ? "-" : "",
40 has_day ? wdate : "",
41 has_msg ? "." : "",
42 has_msg ? wmesg : "");
47 static gboolean set_active_date(GtkTreeModel *model, GtkTreePath *path,
48 GtkTreeIter *iter, gpointer user_data)
50 const char *date1 = user_data;
51 const char *date2;
53 (void) path;
55 gtk_tree_model_get(model, iter, 0, (gpointer) &date2, -1);
56 if (strcmp(date1, date2) == 0) {
57 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(wid_date), iter);
58 return TRUE;
61 return FALSE;
64 void edit_dialog(const char *title,
65 int on,
66 const char *atime,
67 const char *adate,
68 const char *amesg,
69 void (*f_ok)(void)) {
71 GtkWidget *dialog;
72 GtkWidget *bouton;
73 GtkWidget *label;
74 GtkWidget *hbox;
75 GtkWidget *vbox;
77 FREE(newalarm);
78 dialog = gtk_dialog_new();
79 gtk_window_set_title(GTK_WINDOW(dialog), title);
80 g_signal_connect(dialog, "delete_event",
81 G_CALLBACK(gtk_widget_destroy), NULL);
82 g_signal_connect(dialog, "destroy",
83 G_CALLBACK(gtk_widget_destroy), NULL);
85 bouton = gtk_button_new_with_label("Ok");
86 g_signal_connect(bouton, "clicked", G_CALLBACK(set_data), NULL);
87 g_signal_connect(bouton, "clicked", G_CALLBACK(f_ok), NULL);
88 g_signal_connect_swapped(bouton, "clicked",
89 G_CALLBACK(gtk_widget_destroy), dialog);
90 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(dialog))),
91 bouton, TRUE, TRUE, 0);
92 gtk_widget_set_can_default(GTK_WIDGET(bouton), TRUE);
93 gtk_widget_grab_default(GTK_WIDGET(bouton));
94 gtk_widget_show(bouton);
96 bouton = gtk_button_new_with_label("Cancel");
97 g_signal_connect_swapped(bouton, "clicked",
98 G_CALLBACK(gtk_widget_destroy), dialog);
99 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(dialog))),
100 bouton, TRUE, TRUE, 0);
101 gtk_widget_set_can_default(GTK_WIDGET(bouton), TRUE);
102 gtk_widget_show(bouton);
104 gtk_container_set_border_width(GTK_CONTAINER
105 (gtk_dialog_get_content_area(GTK_DIALOG(dialog))), 6);
107 hbox = gtk_hbox_new(FALSE, 1);
108 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), hbox);
109 gtk_widget_show(hbox);
111 /* STATUS */
112 vbox = gtk_vbox_new(FALSE, 1);
113 gtk_container_add(GTK_CONTAINER(hbox), vbox);
114 gtk_widget_show(vbox);
116 label = gtk_label_new("Status");
117 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
118 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 6);
119 gtk_widget_show(label);
121 wid_status = gtk_combo_box_text_new();
122 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_status), "On");
123 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_status), "Off");
124 gtk_box_pack_start(GTK_BOX(vbox), wid_status, FALSE, TRUE, 6);
125 gtk_widget_show(wid_status);
126 gtk_combo_box_set_active(GTK_COMBO_BOX(wid_status), on ? 0 : 1);
128 /* HOUR */
129 vbox = gtk_vbox_new(FALSE, 1);
130 gtk_container_add(GTK_CONTAINER(hbox), vbox);
131 gtk_widget_show(vbox);
133 label = gtk_label_new("Hour");
134 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
135 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 6);
136 gtk_widget_show(label);
138 wid_time = gtk_entry_new();
139 if (atime) gtk_entry_set_text(GTK_ENTRY(wid_time), atime);
140 gtk_box_pack_start(GTK_BOX(vbox), wid_time, FALSE, TRUE, 6);
141 gtk_widget_show(wid_time);
144 /* DAY */
145 vbox = gtk_vbox_new(FALSE, 1);
146 gtk_container_add(GTK_CONTAINER(hbox), vbox);
147 gtk_widget_show(vbox);
149 label = gtk_label_new("Day");
150 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
151 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 6);
152 gtk_widget_show(label);
154 wid_date = gtk_combo_box_text_new();
155 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "ALL");
156 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "1");
157 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "2");
158 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "3");
159 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "4");
160 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "5");
161 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "6");
162 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wid_date), "7");
163 gtk_box_pack_start(GTK_BOX(vbox), wid_date, FALSE, TRUE, 6);
164 gtk_widget_show(wid_date);
165 gtk_combo_box_set_active(GTK_COMBO_BOX(wid_date), 0);
166 if (adate)
167 gtk_tree_model_foreach(gtk_combo_box_get_model(GTK_COMBO_BOX(wid_date)),
168 set_active_date, (void *) adate);
170 /* MESSAGE */
171 vbox = gtk_vbox_new(FALSE, 1);
172 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), vbox);
173 gtk_widget_show(vbox);
175 label = gtk_label_new("Message");
176 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
177 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 6);
178 gtk_widget_show(label);
180 wid_mesg = gtk_entry_new();
181 if (amesg) gtk_entry_set_text(GTK_ENTRY(wid_mesg), amesg);
182 gtk_box_pack_start(GTK_BOX(vbox), wid_mesg, FALSE, TRUE, 6);
183 gtk_widget_show(wid_mesg);
187 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
188 gtk_widget_show(dialog);