12 #include "callbacks.h"
13 #include "interface.h"
16 #define KEY_Enter 65293
18 #define KEY_Down 65364
19 #define KEY_Left 65361
20 #define KEY_Right 65363
23 on_console_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data)
30 on_connect_activate(GtkMenuItem *menuitem, gpointer user_data)
32 if (connect_to_director(user_data)) {
33 start_director_reader(user_data);
39 on_disconnect_activate(GtkMenuItem *menuitem, gpointer user_data)
41 if (disconnect_from_director(user_data)) {
42 stop_director_reader(user_data);
48 on_exit_activate(GtkMenuItem *menuitem, gpointer user_data)
55 on_cut1_activate(GtkMenuItem *menuitem, gpointer user_data)
62 on_copy1_activate(GtkMenuItem *menuitem, gpointer user_data)
69 on_paste1_activate(GtkMenuItem *menuitem, gpointer user_data)
76 on_clear1_activate(GtkMenuItem *menuitem, gpointer user_data)
82 on_preferences1_activate(GtkMenuItem *menuitem, gpointer user_data)
88 on_about_activate(GtkMenuItem *menuitem, gpointer user_data)
90 gtk_widget_show(about1);
96 on_connect_button_clicked(GtkButton *button, gpointer user_data)
98 if (connect_to_director(user_data)) {
99 start_director_reader(user_data);
103 /* Define max length of history and how many to delete when it gets there.
104 * If you make HIST_DEL > HIST_MAX, you shoot yourself in the foot.
106 #define HIST_MAX 2500
109 static GList *hist = NULL;
110 static GList *hc = NULL;
111 static int hist_len = 0;
113 static void add_to_history(gchar *ecmd)
115 int len = strlen(ecmd);
118 hist = g_list_append(hist, bstrdup(ecmd));
121 if (hist_len >= HIST_MAX) {
124 for (i=0; i<HIST_DEL; i++) {
125 hp = g_list_next(hist);
127 hist = g_list_remove(hist, hp->data);
129 hist_len -= HIST_DEL;
135 * Note, apparently there is a bug in GNOME where some of the
136 * key press events are lost -- at least it loses every other
140 on_entry1_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
142 if (event->keyval == KEY_Enter) {
143 char *ecmd = (char *)gtk_entry_get_text((GtkEntry *)entry1);
144 set_text(ecmd, strlen(ecmd));
146 add_to_history(ecmd);
147 write_director(ecmd);
148 gtk_entry_set_text((GtkEntry *)entry1, "");
149 } else if (event->keyval == KEY_Up) {
151 hc = g_list_last(hist);
153 hc = g_list_previous(hc);
156 hc = g_list_first(hist);
158 gtk_entry_set_text((GtkEntry *)entry1, (gchar *)hc->data);
159 } else if (event->keyval == KEY_Down) {
161 hc = g_list_first(hist);
163 hc = g_list_next(hc);
166 hc = g_list_last(hist);
168 gtk_entry_set_text((GtkEntry *)entry1, (gchar *)hc->data);
170 // gtk_entry_set_position((GtkEntry *)entry1, -1);
171 // gtk_window_set_focus((GtkWindow *)app1, entry1);
177 on_app1_show(GtkWidget *widget, gpointer user_data)
184 on_msgs_button_clicked(GtkButton *button, gpointer user_data)
186 write_director("messages");
190 on_msgs_activate(GtkMenuItem *menuitem, gpointer user_data)
192 write_director("messages");
196 on_about_button_clicked(GtkButton *button, gpointer user_data)
198 gtk_widget_hide(about1);
204 on_select_director_OK_clicked(GtkButton *button, gpointer user_data)
207 gtk_widget_hide(dir_dialog);
214 on_select_director_cancel_clicked(GtkButton *button, gpointer user_data)
217 gtk_widget_hide(dir_dialog);
223 * Compare list string items
225 static gint compare_func(const void *data1, const void *data2)
227 return strcmp((const char *)data1, (const char *)data2);
230 static GList *find_combo_list(char *name)
232 if (strcmp(name, "job") == 0) {
235 if (strcmp(name, "pool") == 0) {
238 if (strcmp(name, "client") == 0) {
241 if (strcmp(name, "storage") == 0) {
244 if (strcmp(name, "fileset") == 0) {
247 if (strcmp(name, "messages") == 0) {
248 return messages_list;
250 if (strcmp(name, "type") == 0) {
253 if (strcmp(name, "level") == 0) {
260 * Set correct default values in the Run dialog box
262 static void set_run_defaults()
264 GtkWidget *combo, *entry;
270 stop_director_reader(NULL);
272 combo = lookup_widget(run_dialog, "combo_job");
273 job = (char *)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
274 bsnprintf(cmd, sizeof(cmd), ".defaults job=\"%s\"", job);
276 while (bnet_recv(UA_sock) > 0) {
277 def = strchr(UA_sock->msg, '=');
282 if (strcmp(UA_sock->msg, "job") == 0 ||
283 strcmp(UA_sock->msg, "when") == 0) {
286 /* Where is an entry box */
287 if (strcmp(UA_sock->msg, "where") == 0) {
288 entry = lookup_widget(run_dialog, "entry_where");
289 gtk_entry_set_text(GTK_ENTRY(entry), def);
293 /* Now handle combo boxes */
294 list = find_combo_list(UA_sock->msg);
298 item = g_list_find_custom(list, def, compare_func);
299 bsnprintf(cmd, sizeof(cmd), "combo_%s", UA_sock->msg);
300 combo = lookup_widget(run_dialog, cmd);
304 pos = g_list_position(list, item);
305 gtk_list_select_item(GTK_LIST(GTK_COMBO(combo)->list), pos);
307 start_director_reader(NULL);
311 on_entry_job_changed(GtkEditable *editable, gpointer user_data)
318 on_run_button_clicked(GtkButton *button, gpointer user_data)
323 bstrutime(dt, sizeof(dt), time(NULL));
324 entry = lookup_widget(run_dialog, "entry_when");
325 gtk_entry_set_text(GTK_ENTRY(entry), dt);
327 gtk_widget_show(run_dialog);
332 static char *get_combo_text(GtkWidget *dialog, char *combo_name)
335 combo = lookup_widget(dialog, combo_name);
339 return (char *)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
342 static char *get_entry_text(GtkWidget *dialog, char *entry_name)
345 entry = lookup_widget(dialog, entry_name);
349 return (char *)gtk_entry_get_text(GTK_ENTRY(entry));
352 static char *get_spin_text(GtkWidget *dialog, char *spin_name)
355 spin = (GtkSpinButton *)lookup_widget(dialog, spin_name);
359 return (char *)gtk_entry_get_text(GTK_ENTRY(&spin->entry));
366 on_run_ok_clicked(GtkButton *button, gpointer user_data)
368 char *job, *fileset, *level, *client, *pool, *when, *where, *storage;
370 gtk_widget_hide(run_dialog);
373 job = get_combo_text(run_dialog, "combo_job");
374 fileset = get_combo_text(run_dialog, "combo_fileset");
375 client = get_combo_text(run_dialog, "combo_client");
376 pool = get_combo_text(run_dialog, "combo_pool");
377 storage = get_combo_text(run_dialog, "combo_storage");
378 level = get_combo_text(run_dialog, "combo_level");
380 when = get_entry_text(run_dialog, "entry_when");
381 where = get_entry_text(run_dialog, "entry_where");
383 if (!job || !fileset || !client || !pool || !storage ||
384 !level || !when || !where) {
389 bsnprintf(cmd, sizeof(cmd),
390 "run job=\"%s\" fileset=\"%s\" level=%s client=\"%s\" pool=\"%s\" "
391 "when=\"%s\" where=\"%s\" storage=\"%s\"",
392 job, fileset, level, client, pool, when, where, storage);
394 write_director("yes");
400 on_run_cancel_clicked(GtkButton *button, gpointer user_data)
402 gtk_widget_hide(run_dialog);
408 on_entry1_key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
414 on_restore_button_clicked(GtkButton *button, gpointer user_data)
416 gtk_widget_show(restore_dialog);
421 on_view_fileset_clicked(GtkButton *button, gpointer user_data)
427 on_restore_cancel_clicked(GtkButton *button, gpointer user_data)
429 gtk_widget_hide(restore_dialog);
436 on_label_button_clicked(GtkButton *button, gpointer user_data)
438 gtk_widget_show(label_dialog);
443 on_label_ok_clicked(GtkButton *button, gpointer user_data)
445 char *pool, *volume, *storage, *slot;
447 gtk_widget_hide(label_dialog);
450 pool = get_combo_text(label_dialog, "label_combo_pool");
451 storage = get_combo_text(label_dialog, "label_combo_storage");
453 volume = get_entry_text(label_dialog, "label_entry_volume");
455 slot = get_spin_text(label_dialog, "label_slot");
457 if (!pool || !storage || !volume || !(*volume)) {
462 bsnprintf(cmd, sizeof(cmd),
463 "label name=\"%s\" pool=\"%s\" storage=\"%s\" slot=%s",
464 volume, pool, storage, slot);
470 on_label_cancel_clicked(GtkButton *button, gpointer user_data)
472 gtk_widget_hide(label_dialog);
479 on_select_files_button_clicked(GtkButton *button, gpointer user_data)
481 char *job, *fileset, *client, *pool, *before, *storage;
483 gtk_widget_hide(restore_dialog);
485 job = get_combo_text(restore_dialog, "combo_restore_job");
486 fileset = get_combo_text(restore_dialog, "combo_restore_fileset");
487 client = get_combo_text(restore_dialog, "combo_restore_client");
488 pool = get_combo_text(restore_dialog, "combo_restore_pool");
489 storage = get_combo_text(restore_dialog, "combo_restore_storage");
491 before = get_entry_text(restore_dialog, "restore_before_entry");
493 if (!job || !fileset || !client || !pool || !storage || !before) {
498 bsnprintf(cmd, sizeof(cmd),
499 "restore select current fileset=\"%s\" client=\"%s\" pool=\"%s\" "
500 "storage=\"%s\"", fileset, client, pool, storage);
502 gtk_widget_show(restore_file_selection);
503 select_restore_files(); /* put up select files dialog */
507 on_restore_select_ok_clicked(GtkButton *button, gpointer user_data)
509 gtk_widget_hide(restore_file_selection);
510 write_director("done");
517 on_restore_select_cancel_clicked(GtkButton *button, gpointer user_data)
519 gtk_widget_hide(restore_file_selection);
520 write_director("quit");
526 on_restore_files_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data)
528 gtk_widget_hide(restore_file_selection);
536 on_new1_activate (GtkMenuItem *menuitem,
544 on_open1_activate (GtkMenuItem *menuitem,
552 on_save1_activate (GtkMenuItem *menuitem,
560 on_save_as1_activate (GtkMenuItem *menuitem,
568 on_quit1_activate (GtkMenuItem *menuitem,
576 on_cut2_activate (GtkMenuItem *menuitem,
584 on_copy2_activate (GtkMenuItem *menuitem,
592 on_paste2_activate (GtkMenuItem *menuitem,
600 on_clear2_activate (GtkMenuItem *menuitem,
608 on_properties1_activate (GtkMenuItem *menuitem,
616 on_preferences2_activate (GtkMenuItem *menuitem,
624 on_about2_activate (GtkMenuItem *menuitem,
631 * Set correct default values in the Restore dialog box
633 void set_restore_dialog_defaults()
641 stop_director_reader(NULL);
643 combo = lookup_widget(restore_dialog, "combo_restore_job");
644 job = (char *)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
645 bsnprintf(cmd, sizeof(cmd), ".defaults job=\"%s\"", job);
647 while (bnet_recv(UA_sock) > 0) {
648 def = strchr(UA_sock->msg, '=');
653 if (strcmp(UA_sock->msg, "job") == 0 ||
654 strcmp(UA_sock->msg, "when") == 0 ||
655 strcmp(UA_sock->msg, "where") == 0 ||
656 strcmp(UA_sock->msg, "messages") == 0 ||
657 strcmp(UA_sock->msg, "level") == 0 ||
658 strcmp(UA_sock->msg, "type") == 0) {
662 /* Now handle combo boxes */
663 list = find_combo_list(UA_sock->msg);
667 item = g_list_find_custom(list, def, compare_func);
668 bsnprintf(cmd, sizeof(cmd), "combo_restore_%s", UA_sock->msg);
669 combo = lookup_widget(restore_dialog, cmd);
673 pos = g_list_position(list, item);
674 gtk_list_select_item(GTK_LIST(GTK_COMBO(combo)->list), pos);
676 start_director_reader(NULL);
681 on_restore_job_entry_changed(GtkEditable *editable, gpointer user_data)
683 /* Set defaults that correspond to new job selection */
684 set_restore_dialog_defaults();