/* Copyright (c) 1998 Alexander Yukhimets. All rights reserved. */
#include<stdio.h>
#include<string.h>
#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<gtk/gtk.h>
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<Xm/Xm.h>
#include<Xm/Form.h>
#include<Xm/PushB.h>
#include<Xm/ToggleB.h>
#include<Xm/TextF.h>
#include<Dt/ComboBox.h>
#include<Xm/Label.h>
#include<Xm/List.h>
#include<XmAxy/Notebook.h>
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<XtNumber(label);i++){
xml=XmStringCreateLocalized(label[i]);
n=0;
XtSetArg(args[n],XmNlabelString,xml);n++;
XtSetArg(args[n],XmNtopAttachment,XmATTACH_FORM);n++;
XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM);n++;
XtSetArg(args[n],XmNleftAttachment,XmATTACH_POSITION);n++;
XtSetArg(args[n],XmNleftPosition,i);n++;
XtSetArg(args[n],XmNrightAttachment,XmATTACH_POSITION);n++;
XtSetArg(args[n],XmNrightPosition,i+1);n++;
button=XmCreatePushButton(actions,label[i],args,n);
XtManageChild(button);
XtAddCallback(button,XmNactivateCallback,action_cb,NULL);
XmStringFree(xml);
}
return actions;
}
Widget create_options_dialog(Widget parent){
Widget options;
Arg args[10];
Cardinal n;
Widget actions,notebook,general,display,sound,advanced;
n=0;
XtSetArg(args[n],XmNtitle,"AxY FTP options");n++;
XtSetArg(args[n],XmNdialogStyle,XmDIALOG_APPLICATION_MODAL);n++;
XtSetArg(args[n],XmNverticalSpacing,6);n++;
XtSetArg(args[n],XmNhorizontalSpacing,6);n++;
options=XmCreateFormDialog(parent,"session",args,n);
actions=create_actions(options);
n=0;
/*
XtSetArg(args[n],XmNbackPagePlacement,XmTOP_RIGHT);n++;
XtSetArg(args[n],XmNmajorTabSpacing,0);n++;
XtSetArg(args[n],XmNorientation,XmVERTICAL);n++;
XtSetArg(args[n],XmNbindingType,XmNONE);n++;
XtSetArg(args[n],XmNbackPageNumber,1);n++;
XtSetArg(args[n],XmNbackPageSize,0);n++;
*/
notebook=XmAxyCreateNotebook(options,"notebook",args,n);
XtManageChild(notebook);
/*
n=0;
XtSetArg(args[n],XmNnotebookChildType,XmPAGE_SCROLLER);n++;
XtManageChild(XmCreateLabel(notebook,"",args,n));
*/
general=create_options_general(notebook);
XtManageChild(general);
n=0;
/*
XtSetArg(args[n],XmNnotebookChildType,XmMAJOR_TAB);n++;
XtSetArg(args[n],XmNhighlightThickness,0);n++;
XtManageChild(XmCreatePushButton(notebook,"General",args,n));
*/
display=create_options_display(notebook);
XtManageChild(display);
/*
n=0;
XtSetArg(args[n],XmNnotebookChildType,XmMAJOR_TAB);n++;
XtSetArg(args[n],XmNhighlightThickness,0);n++;
XtManageChild(XmCreatePushButton(notebook,"Display",args,n));
*/
sound=create_options_sound(notebook);
XtManageChild(sound);
/*
n=0;
XtSetArg(args[n],XmNnotebookChildType,XmMAJOR_TAB);n++;
XtSetArg(args[n],XmNhighlightThickness,0);n++;
XtManageChild(XmCreatePushButton(notebook,"Sound",args,n));
*/
advanced=create_options_advanced(notebook);
XtManageChild(advanced);
/*
n=0;
XtSetArg(args[n],XmNnotebookChildType,XmMAJOR_TAB);n++;
XtSetArg(args[n],XmNhighlightThickness,0);n++;
XtManageChild(XmCreatePushButton(notebook,"Advanced",args,n));
*/
XtVaSetValues(actions,
XmNbottomAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_FORM,
XmNtopAttachment,XmATTACH_NONE,
XmNleftAttachment,XmATTACH_FORM,NULL);
XtVaSetValues(notebook,
XmNbottomAttachment,XmATTACH_WIDGET,
XmNbottomWidget,actions,
XmNrightAttachment,XmATTACH_FORM,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,NULL);
XmAxyNotebookSetCurrentPage(notebook,1,FALSE);
put_options_data(options,appdata.odata);
return options;
}
#else
#error Either BUILD_GTK or BUILD_MOTIF should be defined
#endif
syntax highlighted by Code2HTML, v. 0.9.1