/* Copyright (c) 1998 Alexander Yukhimets. All rights reserved. */ #include #include #include"axyftp.h" #include"options_data.h" #include"options_dialog.h" #include"options_general.h" #include"options_display.h" #include"options_sound.h" #include"options_advanced.h" #include"utils.h" #include"read_init.h" #include"functions.h" #ifdef BUILD_GTK #include void put_options_data(GtkWidget *dialog,options_data* opt){ GtkWidget *current; current=WXnameToWidget(dialog,"anonpass"); gtk_entry_set_text(GTK_ENTRY(current),opt->anonpass); current=WXnameToWidget(dialog,"deletions"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(current),opt->deletions); current=WXnameToWidget(dialog,"recurse_del"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(current),opt->recurse_del); current=WXnameToWidget(dialog,"show_session"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(current),opt->show_session); current=WXnameToWidget(dialog,"columnadjustment"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(current),opt->columnadjustment); current=WXnameToWidget(dialog,"maxwidth"); gtk_entry_set_text(GTK_ENTRY(current),opt->maxwidth); current=WXnameToWidget(dialog,"maxwidth_label"); gtk_widget_set_sensitive(GTK_WIDGET(current),opt->columnadjustment); current=WXnameToWidget(dialog,"show_progress"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(current),opt->show_progress); current=WXnameToWidget(dialog,"progress_treshold"); gtk_entry_set_text(GTK_ENTRY(current),opt->progress_treshold); current=WXnameToWidget(dialog,"progress_treshold_label"); gtk_widget_set_sensitive(GTK_WIDGET(current),opt->show_progress); current=WXnameToWidget(dialog,"xferbeep"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(current),opt->xferbeep); current=WXnameToWidget(dialog,"redial"); gtk_entry_set_text(GTK_ENTRY(current),opt->redial); current=WXnameToWidget(dialog,"delay"); gtk_entry_set_text(GTK_ENTRY(current),opt->delay); } void fetch_options_data(GtkWidget *dialog,options_data* opt){ GtkWidget *current; current=WXnameToWidget(dialog,"anonpass"); opt->anonpass=WXnewstring(gtk_entry_get_text(GTK_ENTRY(current))); current=WXnameToWidget(dialog,"deletions"); opt->deletions=(int)GTK_TOGGLE_BUTTON(current)->active; current=WXnameToWidget(dialog,"recurse_del"); opt->recurse_del=(int)GTK_TOGGLE_BUTTON(current)->active; current=WXnameToWidget(dialog,"show_session"); opt->show_session=(int)GTK_TOGGLE_BUTTON(current)->active; current=WXnameToWidget(dialog,"columnadjustment"); opt->columnadjustment=(int)GTK_TOGGLE_BUTTON(current)->active; current=WXnameToWidget(dialog,"maxwidth"); opt->maxwidth=WXnewstring(gtk_entry_get_text(GTK_ENTRY(current))); current=WXnameToWidget(dialog,"show_progress"); opt->show_progress=(int)GTK_TOGGLE_BUTTON(current)->active; current=WXnameToWidget(dialog,"progress_treshold"); opt->progress_treshold=WXnewstring(gtk_entry_get_text(GTK_ENTRY(current))); current=WXnameToWidget(dialog,"xferbeep"); opt->xferbeep=(int)GTK_TOGGLE_BUTTON(current)->active; current=WXnameToWidget(dialog,"redial"); opt->redial=WXnewstring(gtk_entry_get_text(GTK_ENTRY(current))); current=WXnameToWidget(dialog,"delay"); opt->delay=WXnewstring(gtk_entry_get_text(GTK_ENTRY(current))); } static void action_cb(GtkWidget *w){ char *s; gtk_label_get(GTK_LABEL(GTK_BUTTON(w)->child),&s); if(strcmp(s,"OK")==0){ gtk_widget_hide(appdata.options); gtk_grab_remove(appdata.options); destroy_options_data(appdata.odata); appdata.odata=create_options_data(NULL); fetch_options_data(appdata.options,appdata.odata); } else if(strcmp(s,"Help")==0){ show_help(2); } else if(strcmp(s,"Cancel")==0){ gtk_widget_hide(appdata.options); gtk_grab_remove(appdata.options); put_options_data(appdata.options,appdata.odata); } else if(strcmp(s,"Save")==0){ destroy_options_data(appdata.odata); appdata.odata=create_options_data(NULL); fetch_options_data(appdata.options,appdata.odata); write_options_data(options_file,appdata.odata); } } static GtkWidget* create_actions(GtkWidget* parent){ static char* label[]={"OK","Cancel","Save","Help"}; GtkWidget *actions, *button; int i; actions=gtk_hbox_new(TRUE,2); gtk_container_border_width(GTK_CONTAINER(actions),4); gtk_widget_show(actions); for(i=0;i<4;i++){ button=gtk_button_new_with_label(label[i]); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(action_cb),NULL); gtk_box_pack_start(GTK_BOX(actions),button,TRUE,TRUE,1); } return actions; } static int close_cb(GtkWidget* w){ gtk_widget_hide(w); gtk_grab_remove(w); return TRUE; } GtkWidget* create_options_dialog(GtkWidget *parent){ GtkWidget *options,*box,*actions; GtkWidget *notebook,*general,*display,*sound,*advanced; options=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_realize(options); gtk_window_set_title(GTK_WINDOW(options),"AxY FTP options"); gtk_signal_connect(GTK_OBJECT(options),"delete_event", GTK_SIGNAL_FUNC(close_cb),NULL); box=gtk_vbox_new(FALSE,4); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(options),box); actions=create_actions(box); gtk_box_pack_end(GTK_BOX(box),actions,FALSE,FALSE,0); notebook=gtk_notebook_new(); gtk_container_border_width(GTK_CONTAINER(notebook),4); gtk_widget_show(notebook); gtk_box_pack_end(GTK_BOX(box),notebook,TRUE,TRUE,0); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook),TRUE); general=create_options_general(notebook); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),general, gtk_label_new("General")); display=create_options_display(notebook); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),display, gtk_label_new("Display")); sound=create_options_sound(notebook); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),sound, gtk_label_new("Sound")); advanced=create_options_advanced(notebook); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),advanced, gtk_label_new("Advanced")); return options; } #elif defined BUILD_MOTIF #include #include #include #include #include #include
#include #include #include void put_options_data(Widget dialog,options_data* opt){ Widget current; current=XtNameToWidget(dialog,"*anonpass"); XmTextFieldSetString(current,opt->anonpass); current=XtNameToWidget(dialog,"*Verify deletions"); XmToggleButtonSetState(current,opt->deletions,FALSE); current=XtNameToWidget(dialog,"*Recurse deletions"); XmToggleButtonSetState(current,opt->recurse_del,FALSE); current=XtNameToWidget(dialog,"*Show Session Window on startup"); XmToggleButtonSetState(current,opt->show_session,FALSE); current=XtNameToWidget(dialog,"*Enable automatic column width adjustment"); XmToggleButtonSetState(current,opt->columnadjustment,TRUE); current=XtNameToWidget(dialog,"*maxwidth"); XmTextFieldSetString(current,opt->maxwidth); current=XtNameToWidget(dialog,"*Show progress bar"); XmToggleButtonSetState(current,opt->show_progress,TRUE); current=XtNameToWidget(dialog,"*progress_treshold"); XmTextFieldSetString(current,opt->progress_treshold); current=XtNameToWidget(dialog,"*Beep at the end of download/upload"); XmToggleButtonSetState(current,opt->xferbeep,FALSE); current=XtNameToWidget(dialog,"*redial"); XmTextFieldSetString(current,opt->redial); current=XtNameToWidget(dialog,"*delay"); XmTextFieldSetString(current,opt->delay); XmUpdateDisplay(toplevel); } void fetch_options_data(Widget dialog,options_data* opt){ Widget current; current=XtNameToWidget(dialog,"*anonpass"); opt->anonpass=XmTextFieldGetString(current); current=XtNameToWidget(dialog,"*Verify deletions"); opt->deletions=XmToggleButtonGetState(current); current=XtNameToWidget(dialog,"*Recurse deletions"); opt->recurse_del=XmToggleButtonGetState(current); current=XtNameToWidget(dialog,"*Show Session Window on startup"); opt->show_session=XmToggleButtonGetState(current); current=XtNameToWidget(dialog,"*Enable automatic column width adjustment"); opt->columnadjustment=XmToggleButtonGetState(current); current=XtNameToWidget(dialog,"*maxwidth"); opt->maxwidth=XmTextFieldGetString(current); current=XtNameToWidget(dialog,"*Show progress bar"); opt->show_progress=XmToggleButtonGetState(current); current=XtNameToWidget(dialog,"*progress_treshold"); opt->progress_treshold=XmTextFieldGetString(current); current=XtNameToWidget(dialog,"*Beep at the end of download/upload"); opt->xferbeep=XmToggleButtonGetState(current); current=XtNameToWidget(dialog,"*redial"); opt->redial=XmTextFieldGetString(current); current=XtNameToWidget(dialog,"*delay"); opt->delay=XmTextFieldGetString(current); return; } void action_cb(Widget w,XtPointer app,XtPointer call){ XmString xms; String s; XtVaGetValues(w,XmNlabelString,&xms,NULL); if(XmStringGetLtoR(xms,XmFONTLIST_DEFAULT_TAG,&s)){ if(strcmp(s,"OK")==0){ XtUnmanageChild(appdata.options); destroy_options_data(appdata.odata); appdata.odata=create_options_data(NULL); fetch_options_data(appdata.options,appdata.odata); } else if(strcmp(s,"Help")==0){ show_help(2); } else if(strcmp(s,"Cancel")==0){ XtUnmanageChild(appdata.options); put_options_data(appdata.options,appdata.odata); } else if(strcmp(s,"Save")==0){ destroy_options_data(appdata.odata); appdata.odata=create_options_data(NULL); fetch_options_data(appdata.options,appdata.odata); write_options_data(options_file,appdata.odata); } XtFree(s); } XmStringFree(xms); } Widget create_actions(Widget parent){ static String label[]={"OK","Cancel","Save","Help"}; Widget actions,button; XmString xml; int i; Arg args[10]; Cardinal n; n=0; XtSetArg(args[n],XmNfractionBase,XtNumber(label));n++; actions=XmCreateForm(parent,"actions",args,n); XtManageChild(actions); for(i=0;i