/* Copyright (c) 1998   Alexander Yukhimets. All rights reserved. */
#include<stdio.h>

#include"axyftp.h"
#include"utils.h"
#include"multi.h"
#include"functions.h"
#include"dirlist.h"
#include"arrows.h"
#include"proto.h"
#include"little_dialogs.h"

#ifdef BUILD_GTK

#include<gtk/gtk.h>
static void download_cb(GtkWidget*);
static void upload_cb(GtkWidget*);

static void upload_cb(GtkWidget* w){
  int *selrow;
  int ret;
  char* mask;

  if(appdata.job)return;
  if(!appdata.connected){
    (void)popup_warning_dialog(toplevel,"Not connected");
    return;
  }

  selrow=get_selected_rows(appdata.local.table);
  if(selrow==NULL){
    (void)popup_warning_dialog(toplevel,"Nothing selected");
    return;
  }
  appdata.job=4;
  busy_cursor(TRUE);
  ret=put_files(selrow,get_proto_state(appdata.proto));
  mask=gtk_entry_get_text(GTK_ENTRY(appdata.remote.text));
  if(!ret)update_remote(mask);
  busy_cursor(FALSE);
  appdata.job=0;
  return;
}

static void download_cb(GtkWidget* w){
  int *selrow;
  char* mask;

  if(appdata.job)return;
  if(!appdata.connected){
    (void)popup_warning_dialog(toplevel,"Not connected");
    return;
  }

  selrow=get_selected_rows(appdata.remote.table);
  if(selrow==NULL){
    (void)popup_warning_dialog(toplevel,"Nothing selected");
    return;
  }
  appdata.job=3;
  busy_cursor(TRUE);
  if(!get_files(selrow,get_proto_state(appdata.proto))){
    mask=gtk_entry_get_text(GTK_ENTRY(appdata.local.text));
    update_local(mask);
    WXfree(selrow);
    busy_cursor(FALSE);
    appdata.job=0;
  } else {
    busy_cursor(FALSE);
    appdata.job=0;
  }
  return;
}

GtkWidget* create_arrows(GtkWidget* parent){
  GtkWidget* arrows;
  GtkWidget *leftal,*left,*rightal,*right;

  arrows=gtk_vbox_new(TRUE,2);
  gtk_container_border_width(GTK_CONTAINER(arrows),4);
  gtk_widget_show(arrows);

  leftal=gtk_alignment_new(0.5,0.99,0.0,0.0);
  gtk_widget_show(leftal);
  left=gtk_button_new_with_label(" <- ");
  gtk_widget_show(left);
  gtk_container_add(GTK_CONTAINER(leftal),left);
  gtk_box_pack_start(GTK_BOX(arrows),leftal,TRUE,TRUE,2);
  gtk_signal_connect_after(GTK_OBJECT(left),"clicked",
      GTK_SIGNAL_FUNC(download_cb),NULL);

  gtk_widget_set_usize(left,gtkfontheight*2.5,gtkfontheight*2.5);
  
  rightal=gtk_alignment_new(0.5,0.01,0.0,0.0);
  gtk_widget_show(rightal);
  right=gtk_button_new_with_label(" -> ");
  gtk_widget_show(right);
  gtk_signal_connect_after(GTK_OBJECT(right),"clicked",
      GTK_SIGNAL_FUNC(upload_cb),NULL);

  gtk_container_add(GTK_CONTAINER(rightal),right);
  gtk_box_pack_start(GTK_BOX(arrows),rightal,TRUE,TRUE,2);
  gtk_widget_set_usize(right,gtkfontheight*2.5,gtkfontheight*2.5);

  return arrows;
}

#elif defined BUILD_MOTIF

#include<Xm/Xm.h>
#include<Xm/Form.h>
#include<Xm/PushB.h>
#include<Xm/TextF.h>

void download_cb(Widget,XtPointer,XtPointer);
void upload_cb(Widget,XtPointer,XtPointer);

void upload_cb(Widget w,XtPointer app,XtPointer call){
  int *selrow;
  int ret;
  char* mask;

  if(appdata.job)return;
  if(!appdata.connected){
    (void)popup_warning_dialog(toplevel,"Not connected");
    return;
  }

  selrow=get_selected_rows(appdata.local.table);
  if(selrow==NULL){
    (void)popup_warning_dialog(toplevel,"Nothing selected");
    return;
  }
  appdata.job=4;
  busy_cursor(True);
  XmUpdateDisplay(toplevel);
  ret=put_files(selrow,get_proto_state(appdata.proto));
  mask=XmTextFieldGetString(appdata.remote.text);
  if(!ret)update_remote(mask);
  XtFree(mask);
  busy_cursor(False);
  appdata.job=0;
  return;
}

void download_cb(Widget w,XtPointer app,XtPointer call){
  int *selrow;
  char* mask;

  if(appdata.job)return;
  if(!appdata.connected){
    (void)popup_warning_dialog(toplevel,"Not connected");
    return;
  }

  selrow=get_selected_rows(appdata.remote.table);
  if(selrow==NULL){
    (void)popup_warning_dialog(toplevel,"Nothing selected");
    return;
  }
  appdata.job=3;
  busy_cursor(TRUE);
  if(!get_files(selrow,get_proto_state(appdata.proto))){
    mask=XmTextFieldGetString(appdata.local.text);
    update_local(mask);
    WXfree(mask);
  }
  WXfree((char*)selrow);
  busy_cursor(FALSE);
  appdata.job=0;
  return;
  /*
  selrow=get_selected_row(appdata.remote.table);
  switch(selrow){
    case MANY:
    case NONE:
      (void)popup_warning_dialog(toplevel,
	  "Exactly one remote file should be selected");
      return;
    default:
      appdata.job=3;
      busy_cursor(True);
      XmUpdateDisplay(toplevel);
      ret=download_file(selrow,get_proto_state(appdata.proto));
      mask=XmTextFieldGetString(appdata.local.text);
      if(!ret)update_local(mask);
      XtFree(mask);
      busy_cursor(False);
      appdata.job=0;
      return;
  }
  */
}

Widget create_arrows(Widget parent){
  Widget arrows;
  Arg args[10];
  Cardinal n;
  Widget left,right;
  XmString label;
  Dimension d;
  Pixel b;

  XtVaGetValues(parent,XmNbackground,&b,NULL);


  n=0;
  XtSetArg(args[n],XmNhorizontalSpacing,4);
  arrows=XmCreateForm(parent,"arrows",args,n);
  XtManageChild(arrows);

  label=XmStringCreateLocalized(" <- ");
  n=0;
  XtSetArg(args[n],XmNlabelString,label);n++;
  XtSetArg(args[n],XmNhighlightColor,b);n++;
  XtSetArg(args[n],XmNtopAttachment,XmATTACH_NONE);n++;
  XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM);n++;
  XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM);n++;
  XtSetArg(args[n],XmNbottomAttachment,XmATTACH_POSITION);n++;
  XtSetArg(args[n],XmNbottomPosition,49);n++;
  left=XmCreatePushButton(arrows,"<-",args,n);
  XtManageChild(left);
  XmStringFree(label);
  XtVaGetValues(left,XmNwidth,&d,NULL);
  XtVaSetValues(left,XmNheight,d,NULL);

  label=XmStringCreateLocalized(" -> ");
  n=0;
  XtSetArg(args[n],XmNlabelString,label);n++;
  XtSetArg(args[n],XmNhighlightColor,b);n++;
  XtSetArg(args[n],XmNtopAttachment,XmATTACH_POSITION);n++;
  XtSetArg(args[n],XmNtopPosition,51);n++;
  XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM);n++;
  XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM);n++;
  XtSetArg(args[n],XmNbottomAttachment,XmATTACH_NONE);n++;
  right=XmCreatePushButton(arrows,"->",args,n);
  XtManageChild(right);
  XmStringFree(label);
  XtVaSetValues(right,XmNheight,d,NULL);

  XtAddCallback(left,XmNactivateCallback,download_cb,NULL);
  XtAddCallback(right,XmNactivateCallback,upload_cb,NULL);

  return arrows;
}

#else
#error Either BUILD_GTK or BUILD_MOTIF should be defined
#endif


syntax highlighted by Code2HTML, v. 0.9.1