/* Copyright (c) 1998 Alexander Yukhimets. All rights reserved. */
#include<stdio.h>
#include"axyftp.h"
#include"multi.h"
#include"utils.h"
#include"pixmaps.h"
#include"functions.h"
#ifdef BUILD_GTK
#include<gtk/gtk.h>
static int close_event_cb(GtkWidget* w){
GtkWidget* text;
gtk_widget_hide(w);
gtk_grab_remove(w);
if((text=WXnameToWidget(w,"text"))!=NULL)
gtk_window_set_focus(GTK_WINDOW(w),text);
return TRUE;
}
static void help_cb(GtkWidget* w,gpointer app){
show_help((int)app);
}
static void xfer_close_cb(GtkWidget* w){
gtk_widget_hide(w);
gtk_grab_remove(w);
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,3);
}
static void xfer_cb(GtkWidget* w,gpointer app){
GtkWidget *d;
d=gtk_widget_get_toplevel(w);
gtk_widget_hide(d);
gtk_grab_remove(d);
appdata.job=3;
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,(int)app);
}
void init_xfer_dialog(GtkWidget* dialog,char* file){
GtkWidget* l;
l=(GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(dialog));
gtk_label_set(GTK_LABEL(l),file);
gtk_widget_show(dialog);
gtk_grab_add(dialog);
}
GtkWidget* create_xfer_dialog(GtkWidget* parent){
GtkWidget *dialog,*box,*pict,*lbox,*label,*actions,*button;
dialog=gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog),"AxY FTP transfer confirm");
/*gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_MOUSE);*/
gtk_signal_connect(GTK_OBJECT(dialog),"delete_event",
GTK_SIGNAL_FUNC(xfer_close_cb),NULL);
box=gtk_hbox_new(FALSE,4);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),box,TRUE,TRUE,6);
gtk_widget_show(box);
pict=gtk_pixmap_new(question_xpm,questmask_xpm);
gtk_box_pack_start(GTK_BOX(box),pict,FALSE,FALSE,0);
gtk_widget_show(pict);
lbox=gtk_vbox_new(FALSE,4);
gtk_box_pack_start(GTK_BOX(box),lbox,TRUE,TRUE,6);
gtk_widget_show(lbox);
label=gtk_label_new("");
gtk_box_pack_start(GTK_BOX(lbox),label,TRUE,TRUE,6);
gtk_widget_show(label);
gtk_object_set_user_data(GTK_OBJECT(dialog),(gpointer)label);
label=gtk_label_new("already exists");
gtk_box_pack_start(GTK_BOX(lbox),label,TRUE,TRUE,6);
gtk_widget_show(label);
actions=gtk_hbox_new(TRUE,6);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),actions);
gtk_widget_show(actions);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Overwrite ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(xfer_cb),(gpointer)1);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Resume ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(xfer_cb),(gpointer)2);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Skip ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(xfer_cb),(gpointer)3);
return dialog;
}
static void delete_close_cb(GtkWidget* w){
gtk_widget_hide(w);
gtk_grab_remove(w);
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,3);
}
static void delete_cb(GtkWidget* w,gpointer app){
GtkWidget* d;
d=gtk_widget_get_toplevel(w);
gtk_widget_hide(d);
gtk_grab_remove(d);
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,(int)app);
return;
}
void init_delete_dialog(GtkWidget* dialog,char* file){
GtkWidget* l;
l=(GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(dialog));
gtk_label_set(GTK_LABEL(l),file);
gtk_widget_show(dialog);
gtk_grab_add(dialog);
}
GtkWidget* create_delete_dialog(GtkWidget* parent){
GtkWidget *dialog,*box,*pict,*label,*actions,*button,*lbox;
dialog=gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog),"AxY FTP delete confirm");
/*gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_MOUSE);*/
gtk_signal_connect(GTK_OBJECT(dialog),"delete_event",
GTK_SIGNAL_FUNC(delete_close_cb),NULL);
box=gtk_hbox_new(FALSE,4);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),box,TRUE,TRUE,6);
gtk_widget_show(box);
pict=gtk_pixmap_new(question_xpm,questmask_xpm);
gtk_box_pack_start(GTK_BOX(box),pict,FALSE,FALSE,0);
gtk_widget_show(pict);
lbox=gtk_vbox_new(FALSE,4);
gtk_box_pack_start(GTK_BOX(box),lbox,TRUE,TRUE,6);
gtk_widget_show(lbox);
label=gtk_label_new("Delete");
gtk_box_pack_start(GTK_BOX(lbox),label,TRUE,TRUE,6);
gtk_widget_show(label);
label=gtk_label_new("");
gtk_box_pack_start(GTK_BOX(lbox),label,TRUE,TRUE,6);
gtk_widget_show(label);
gtk_object_set_user_data(GTK_OBJECT(dialog),(gpointer)label);
actions=gtk_hbox_new(TRUE,6);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),actions);
gtk_widget_show(actions);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Yes ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(delete_cb),(gpointer)1);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Yes to all ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(delete_cb),(gpointer)2);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" No ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(delete_cb),(gpointer)3);
return dialog;
}
static void rename_cb(GtkWidget* w,gpointer app){
GtkWidget* d;
int which;
char* text;
char* orig;
which=(int)app;
d=gtk_widget_get_toplevel(w);
close_event_cb(d);
if(appdata.job && which==REMOTE){
return;
}
text=gtk_entry_get_text(GTK_ENTRY(WXnameToWidget(d,"text")));
if(text){
orig=(char*)gtk_object_get_user_data(GTK_OBJECT(d));
if(orig){
switch(which){
case LOCAL:
busy_cursor(TRUE);
if(!rename_local(orig,text)){
char* mask=gtk_entry_get_text(GTK_ENTRY(appdata.local.text));
update_local(mask);
}
if(!appdata.job)busy_cursor(FALSE);
break;
case REMOTE:
appdata.job=9;
busy_cursor(TRUE);
if(!rename_remote(orig,text)){
char* mask=gtk_entry_get_text(GTK_ENTRY(appdata.remote.text));
update_remote(mask);
}
busy_cursor(FALSE);
appdata.job=0;
break;
default:
break;
}
}
}
return;
}
void init_rename_dialog(GtkWidget* dialog,char* text,char* orig){
GtkWidget* t;
t=WXnameToWidget(dialog,"label");
gtk_label_set(GTK_LABEL(t),text);
gtk_object_set_user_data(GTK_OBJECT(dialog),(gpointer)orig);
t=WXnameToWidget(dialog,"text");
gtk_entry_set_text(GTK_ENTRY(t),orig);
gtk_editable_select_region(GTK_EDITABLE(t),0,-1);
gtk_window_set_focus(GTK_WINDOW(dialog),t);
gtk_widget_show(dialog);
}
GtkWidget* create_rename_dialog(GtkWidget* parent,int which){
GtkWidget *dialog,*label,*text,*actions,*button;
dialog=gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog),"AxY FTP rename prompt");
/*gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_MOUSE);*/
gtk_signal_connect(GTK_OBJECT(dialog),"delete_event",
GTK_SIGNAL_FUNC(close_event_cb),NULL);
text=gtk_entry_new();
gtk_box_pack_end(GTK_BOX(GTK_DIALOG(dialog)->vbox),text,TRUE,TRUE,4);
gtk_widget_set_name(text,"text");
gtk_widget_show(text);
gtk_widget_set_usize(text,0,gtkfontheight*2);
gtk_signal_connect(GTK_OBJECT(text),"activate",
GTK_SIGNAL_FUNC(rename_cb),(gpointer)which);
label=gtk_label_new("");
gtk_box_pack_end(GTK_BOX(GTK_DIALOG(dialog)->vbox),label,TRUE,TRUE,4);
gtk_widget_set_name(label,"label");
gtk_widget_show(label);
actions=gtk_hbox_new(TRUE,6);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),actions);
gtk_widget_show(actions);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" OK ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(rename_cb),(gpointer)which);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Cancel ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(close_event_cb),GTK_OBJECT(dialog));
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Help ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(help_cb),GTK_OBJECT(dialog));
return dialog;
}
static void exec_cb(GtkWidget* w,gpointer app){
GtkWidget* d;
int which;
char* text;
which=(int)app;
d=gtk_widget_get_toplevel(w);
close_event_cb(d);
if(appdata.job && which==REMOTE)return;
text=gtk_entry_get_text(GTK_ENTRY(WXnameToWidget(d,"text")));
if(text){
switch(which){
case LOCAL:
busy_cursor(TRUE);
exec_local(text);
if(!appdata.job)busy_cursor(FALSE);
break;
case REMOTE:
appdata.job=8;
busy_cursor(TRUE);
exec_remote(text);
busy_cursor(FALSE);
appdata.job=0;
break;
default:
break;
}
}
return;
}
GtkWidget* create_exec_dialog(GtkWidget* parent,int which){
GtkWidget *dialog,*label,*text,*actions,*button;
dialog=gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog),"AxY FTP exec prompt");
/*gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_MOUSE);*/
gtk_signal_connect(GTK_OBJECT(dialog),"delete_event",
GTK_SIGNAL_FUNC(close_event_cb),NULL);
switch(which){
case LOCAL:
label=gtk_label_new("Enter command to execute localy:");
break;
case REMOTE:
label=gtk_label_new("Enter command to execute remotely\n(using SITE) :");
break;
default:
label=gtk_label_new("");
break;
}
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),label,TRUE,TRUE,4);
gtk_widget_show(label);
text=gtk_entry_new();
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),text,TRUE,TRUE,4);
gtk_widget_set_name(text,"text");
gtk_widget_show(text);
gtk_widget_set_usize(text,0,gtkfontheight*2);
gtk_signal_connect(GTK_OBJECT(text),"activate",
GTK_SIGNAL_FUNC(exec_cb),(gpointer)which);
actions=gtk_hbox_new(TRUE,6);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),actions);
gtk_widget_show(actions);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" OK ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(exec_cb),(gpointer)which);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Cancel ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(close_event_cb),GTK_OBJECT(dialog));
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Help ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(help_cb),GTK_OBJECT(dialog));
gtk_window_set_focus(GTK_WINDOW(dialog),text);
return dialog;
}
static void mkdir_cb(GtkWidget* w,gpointer app){
GtkWidget* d;
int which;
char* text;
char* mask;
which=(int)app;
d=gtk_widget_get_toplevel(w);
close_event_cb(d);
if(appdata.job && which==REMOTE)return;
text=gtk_entry_get_text(GTK_ENTRY(WXnameToWidget(d,"text")));
if(text){
switch(which){
case LOCAL:
busy_cursor(TRUE);
if(!mkdir_local(text)){
mask=gtk_entry_get_text(GTK_ENTRY(appdata.local.text));
update_local(mask);
}
if(!appdata.job)busy_cursor(FALSE);
break;
case REMOTE:
appdata.job=8;
busy_cursor(TRUE);
if(!mkdir_remote(text)){
mask=gtk_entry_get_text(GTK_ENTRY(appdata.remote.text));
update_remote(mask);
}
busy_cursor(FALSE);
appdata.job=0;
break;
default:
break;
}
}
return;
}
GtkWidget* create_mkdir_dialog(GtkWidget* parent,int which){
GtkWidget *dialog,*label,*text,*actions,*button;
dialog=gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog),"AxY FTP mkdir prompt");
gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_MOUSE);
gtk_signal_connect(GTK_OBJECT(dialog),"delete_event",
GTK_SIGNAL_FUNC(close_event_cb),NULL);
switch(which){
case LOCAL:
label=gtk_label_new("Enter name of local directory to create:");
break;
case REMOTE:
label=gtk_label_new("Enter name of remote directory to create:");
break;
default:
label=gtk_label_new("");
break;
}
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),label,TRUE,TRUE,4);
gtk_widget_show(label);
text=gtk_entry_new();
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),text,TRUE,TRUE,4);
gtk_widget_set_name(text,"text");
gtk_widget_show(text);
gtk_widget_set_usize(text,0,gtkfontheight*2);
gtk_signal_connect(GTK_OBJECT(text),"activate",
GTK_SIGNAL_FUNC(mkdir_cb),(gpointer)which);
actions=gtk_hbox_new(TRUE,6);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),actions);
gtk_widget_show(actions);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" OK ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(mkdir_cb),(gpointer)which);
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Cancel ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(close_event_cb),GTK_OBJECT(dialog));
label=gtk_alignment_new(0.5,0.5,0,0);
gtk_box_pack_start(GTK_BOX(actions),label,TRUE,TRUE,4);
gtk_widget_show(label);
button=gtk_button_new_with_label(" Help ");
gtk_container_add(GTK_CONTAINER(label),button);
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(help_cb),GTK_OBJECT(dialog));
gtk_window_set_focus(GTK_WINDOW(dialog),text);
return dialog;
}
#elif defined BUILD_MOTIF
#include<Xm/Xm.h>
#include<Xm/TextF.h>
#include<Xm/SelectioB.h>
#include<Xm/MessageB.h>
static void help_cb(Widget w,XtPointer app,XtPointer call){
show_help((int)app);
}
static void close_xfer_cb(Widget w,XtPointer app,XtPointer call){
XtUnmanageChild((Widget)app);
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,3);
}
static void xfer_cb(Widget w,XtPointer app,XtPointer call){
XtUnmanageChild(w);
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,(int)app);
}
void init_xfer_dialog(Widget dialog,char* file){
char* p;
XmString xms;
p=WXmalloc(strlen(file)+50);
sprintf(p,"%s\nalready exists",file);
xms=XmStringCreateLocalized(p);
XtVaSetValues(dialog,XmNmessageString,xms,NULL);
WXfree(p);
XmStringFree(xms);
XtManageChild(dialog);
}
Widget create_xfer_dialog(Widget parent){
Widget dialog,shell;
XmString ok,cancel,help;
Cardinal n;
Arg args[10];
ok=XmStringCreateLocalized("Overwrite");
cancel=XmStringCreateLocalized("Resume");
help=XmStringCreateLocalized("Skip");
n=0;
XtSetArg(args[n],XmNtitle,"AxY FTP transfer confirm");n++;
XtSetArg(args[n],XmNokLabelString,ok);n++;
XtSetArg(args[n],XmNcancelLabelString,cancel);n++;
XtSetArg(args[n],XmNhelpLabelString,help);n++;
XtSetArg(args[n],XmNmessageAlignment,XmALIGNMENT_CENTER);n++;
XtSetArg(args[n],XmNdialogStyle,XmDIALOG_APPLICATION_MODAL);n++;
dialog=XmCreateQuestionDialog(parent,"xfer",args,n);
XtAddCallback(dialog,XmNokCallback,xfer_cb,(XtPointer)1);
XtAddCallback(dialog,XmNcancelCallback,xfer_cb,(XtPointer)2);
XtAddCallback(dialog,XmNhelpCallback,xfer_cb,(XtPointer)3);
shell=dialog;
while(!XtIsWMShell(shell))shell=XtParent(shell);
XtVaSetValues(shell,XmNdeleteResponse,XmDO_NOTHING,
XmNmwmFunctions,0,NULL);
XtAddCallback(shell,XmNdestroyCallback,close_xfer_cb,(XtPointer)dialog);
XmStringFree(ok);
XmStringFree(cancel);
XmStringFree(help);
return dialog;
}
static void close_delete_cb(Widget w,XtPointer app,XtPointer call){
XtUnmanageChild((Widget)app);
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,3);
}
static void delete_cb(Widget w,XtPointer app,XtPointer call){
XtUnmanageChild(w);
busy_cursor(TRUE);
process_events();
siglongjmp(jmp_down_env,(int)app);
}
void init_delete_dialog(Widget dialog,char* file){
char* p;
XmString xms;
p=WXmalloc(strlen(file)+50);
sprintf(p,"Delete\n%s",file);
xms=XmStringCreateLocalized(p);
XtVaSetValues(dialog,XmNmessageString,xms,NULL);
WXfree(p);
XmStringFree(xms);
XtManageChild(dialog);
}
Widget create_delete_dialog(Widget parent){
Widget dialog,shell;
XmString ok,cancel,help;
Cardinal n;
Arg args[10];
ok=XmStringCreateLocalized("Yes");
cancel=XmStringCreateLocalized("Yes to all");
help=XmStringCreateLocalized("No");
n=0;
XtSetArg(args[n],XmNtitle,"AxY FTP delete confirm");n++;
XtSetArg(args[n],XmNokLabelString,ok);n++;
XtSetArg(args[n],XmNcancelLabelString,cancel);n++;
XtSetArg(args[n],XmNhelpLabelString,help);n++;
XtSetArg(args[n],XmNmessageAlignment,XmALIGNMENT_CENTER);n++;
XtSetArg(args[n],XmNdialogStyle,XmDIALOG_APPLICATION_MODAL);n++;
dialog=XmCreateQuestionDialog(parent,"delete",args,n);
XtAddCallback(dialog,XmNokCallback,delete_cb,(XtPointer)1);
XtAddCallback(dialog,XmNcancelCallback,delete_cb,(XtPointer)2);
XtAddCallback(dialog,XmNhelpCallback,delete_cb,(XtPointer)3);
shell=dialog;
while(!XtIsWMShell(shell))shell=XtParent(shell);
XtVaSetValues(shell,XmNdeleteResponse,XmDO_NOTHING,
XmNmwmFunctions,0,NULL);
XtAddCallback(shell,XmNdestroyCallback,close_delete_cb,(XtPointer)dialog);
XmStringFree(ok);
XmStringFree(cancel);
XmStringFree(help);
return dialog;
}
static void rename_cb(Widget w,XtPointer app,XtPointer call){
int which;
XmSelectionBoxCallbackStruct *cbs;
char* text;
char* orig;
which=(int)app;
cbs=(XmSelectionBoxCallbackStruct*)call;
if(appdata.job && which==REMOTE){
XtUnmanageChild(w);
return;
}
if(XmStringGetLtoR(cbs->value,XmFONTLIST_DEFAULT_TAG,&text)){
XtUnmanageChild(w);
XtVaGetValues(w,XmNuserData,&orig,NULL);
if(orig){
switch(which){
case LOCAL:
busy_cursor(True);
if(!rename_local(orig,text)){
char* mask=XmTextFieldGetString(appdata.local.text);
update_local(mask);
XtFree(mask);
}
if(!appdata.job)busy_cursor(False);
break;
case REMOTE:
appdata.job=9;
busy_cursor(True);
if(!rename_remote(orig,text)){
char* mask=XmTextFieldGetString(appdata.remote.text);
update_remote(mask);
XtFree(mask);
}
busy_cursor(False);
appdata.job=0;
break;
default:
break;
}
}
XtFree(text);
} else {
XtUnmanageChild(w);
}
return;
}
void init_rename_dialog(Widget dialog,char* text,char* orig){
XmString xms;
Widget t;
xms=XmStringCreateLocalized(text);
XtVaSetValues(dialog,XmNselectionLabelString,xms,
XmNtextString,NULL,XmNuserData,(XtPointer)orig,NULL);
XmStringFree(xms);
t=XmSelectionBoxGetChild(dialog,XmDIALOG_TEXT);
XmTextFieldReplace(t,0,XmTextFieldGetLastPosition(t),orig);
XtManageChild(dialog);
XmTextFieldSetSelection(t,0,strlen(orig),CurrentTime);
}
Widget create_rename_dialog(Widget parent,int which){
Widget dialog,child;
Arg args[10];
Cardinal n;
Pixel white_pixel,black_pixel;
white_pixel=WhitePixelOfScreen(XtScreen(parent));
black_pixel=BlackPixelOfScreen(XtScreen(parent));
n=0;
XtSetArg(args[n],XmNtitle,"AxY FTP rename prompt");n++;
XtSetArg(args[n],XmNdialogStyle,XmDIALOG_APPLICATION_MODAL);n++;
dialog=XmCreatePromptDialog(parent,"rename",args,n);
child=XmSelectionBoxGetChild(dialog,XmDIALOG_TEXT);
XtVaSetValues(child,XmNbackground,white_pixel,
XmNforeground,black_pixel,
XmNhighlightThickness,0,NULL);
XtAddCallback(dialog,XmNokCallback,rename_cb,(XtPointer)which);
XtAddCallback(dialog,XmNhelpCallback,help_cb,(XtPointer)(10+which));
return dialog;
}
static void exec_cb(Widget w,XtPointer app,XtPointer call){
int which;
XmSelectionBoxCallbackStruct *cbs;
char* text;
which=(int)app;
cbs=(XmSelectionBoxCallbackStruct*)call;
XtUnmanageChild(w);
if(appdata.job && which==REMOTE)return;
if(XmStringGetLtoR(cbs->value,XmFONTLIST_DEFAULT_TAG,&text)){
switch(which){
case LOCAL:
busy_cursor(True);
exec_local(text);
if(!appdata.job)busy_cursor(False);
break;
case REMOTE:
appdata.job=8;
busy_cursor(True);
exec_remote(text);
busy_cursor(False);
appdata.job=0;
break;
default:
break;
}
XtFree(text);
}
return;
}
Widget create_exec_dialog(Widget parent,int which){
Widget dialog,child;
Arg args[10];
Cardinal n;
XmString xms;
Pixel white_pixel,black_pixel;
white_pixel=WhitePixelOfScreen(XtScreen(parent));
black_pixel=BlackPixelOfScreen(XtScreen(parent));
switch(which){
case LOCAL:
xms=XmStringCreateLocalized("Enter command to execute localy:");
break;
case REMOTE:
xms=XmStringCreateLocalized(
"Enter command to execute remotely\n(using SITE) :");
break;
default:
xms=XmStringCreateLocalized("");
break;
}
n=0;
XtSetArg(args[n],XmNtitle,"AxY FTP exec prompt");n++;
XtSetArg(args[n],XmNselectionLabelString,xms);n++;
XtSetArg(args[n],XmNdialogStyle,XmDIALOG_APPLICATION_MODAL);n++;
dialog=XmCreatePromptDialog(parent,"exec",args,n);
child=XmSelectionBoxGetChild(dialog,XmDIALOG_TEXT);
XtVaSetValues(child,XmNbackground,white_pixel,
XmNforeground,black_pixel,
XmNhighlightThickness,0,NULL);
XmStringFree(xms);
XtAddCallback(dialog,XmNokCallback,exec_cb,(XtPointer)which);
XtAddCallback(dialog,XmNhelpCallback,help_cb,(XtPointer)(20+which));
return dialog;
}
static void mkdir_cb(Widget w,XtPointer app,XtPointer call){
int which;
XmSelectionBoxCallbackStruct *cbs;
char* text;
char* mask;
which=(int)app;
cbs=(XmSelectionBoxCallbackStruct*)call;
XtUnmanageChild(w);
if(appdata.job && which==REMOTE)return;
if(XmStringGetLtoR(cbs->value,XmFONTLIST_DEFAULT_TAG,&text)){
switch(which){
case LOCAL:
busy_cursor(True);
if(!mkdir_local(text)){
mask=XmTextFieldGetString(appdata.local.text);
update_local(mask);
XtFree(mask);
}
if(!appdata.job)busy_cursor(False);
break;
case REMOTE:
appdata.job=8;
busy_cursor(True);
if(!mkdir_remote(text)){
mask=XmTextFieldGetString(appdata.remote.text);
update_remote(mask);
XtFree(mask);
}
busy_cursor(False);
appdata.job=0;
break;
default:
break;
}
XtFree(text);
}
return;
}
Widget create_mkdir_dialog(Widget parent,int which){
Widget dialog,child;
Arg args[10];
Cardinal n;
XmString xms;
Pixel white_pixel,black_pixel;
white_pixel=WhitePixelOfScreen(XtScreen(parent));
black_pixel=BlackPixelOfScreen(XtScreen(parent));
switch(which){
case LOCAL:
xms=XmStringCreateLocalized("Enter name of local directory to create:");
break;
case REMOTE:
xms=XmStringCreateLocalized("Enter name of remote directory to create:");
break;
default:
xms=XmStringCreateLocalized("");
break;
}
n=0;
XtSetArg(args[n],XmNtitle,"AxY FTP mkdir prompt");n++;
XtSetArg(args[n],XmNselectionLabelString,xms);n++;
XtSetArg(args[n],XmNdialogStyle,XmDIALOG_APPLICATION_MODAL);n++;
dialog=XmCreatePromptDialog(parent,"mkdir",args,n);
child=XmSelectionBoxGetChild(dialog,XmDIALOG_TEXT);
XtVaSetValues(child,XmNbackground,white_pixel,
XmNforeground,black_pixel,
XmNhighlightThickness,0,NULL);
XmStringFree(xms);
XtAddCallback(dialog,XmNokCallback,mkdir_cb,(XtPointer)which);
XtAddCallback(dialog,XmNhelpCallback,help_cb,(XtPointer)(30+which));
return dialog;
}
#else
#error Either BUILD_GTK or BUILD_MOTIF should be defined
#endif
syntax highlighted by Code2HTML, v. 0.9.1