/*                               -*- Mode: C -*- 
 * $Basename: scommands.c $
 * $Revision: 1.9.1.3 $
 * Author          : jonathan@Think.COM
 * Created On      : 92/03/17  14:17:00
 * Last Modified By: Ulrich Pfeifer
 * Last Modified On: Mon May  5 09:34:29 1997
 * Language        : C
 * Update Count    : 1
 * Status          : Unknown, Use with caution!
 * 
 * (C) Copyright 1997, Universität Dortmund, all rights reserved.
 * (C) Copyright CNIDR (see ../doc/CNIDR/COPYRIGHT)
 */

#ifndef lint
static char *PRCSid = "$Id: scommands.c 1.9.1.3 Mon, 05 May 1997 11:54:27 +0200 pfeifer $";
#endif

#define _C_SCOMMANDS
#define XWAIS
#include "xwais.h"

int last_source = NO_ITEM_SELECTED;

static Source edit_source = NULL;

int get_selected_source()
{
  return(get_selected_item(sourcewindow->ListWidget));
}

/* widget commands */

/* ARGSUSED */
void
EditSource(w, closure, call_data)
Widget w;
XtPointer closure, call_data;
{
  SList s;
  char msg[1000];
  int CurrentSource;

  double_click = FALSE;
  LastClicked = w;

  if ((CurrentSource = get_selected_source())
      != NO_ITEM_SELECTED) {
#ifdef MOTIF
    last_source = CurrentSource;
#endif
    if (last_source == CurrentSource) {
      if(edit_source == NULL) 
	edit_source = (Source)s_malloc(sizeof(_Source));

      if(!ReadSourceFile(edit_source, 
			 Source_items[CurrentSource],
			 app_resources.userSourceDirectory))
	ReadSourceFile(edit_source, 
		       Source_items[CurrentSource],
		       app_resources.commonSourceDirectory);

      sprintf(msg, "Opening source: %s\n", edit_source->name);
      XwaisPrintf(msg);
      PopupSource(edit_source);
    }
    else last_source = CurrentSource;
  } 
  else {
    last_source = -1;
    XwaisPrintf("No source selected.\nPlease selected one and try again.\n");
  }
}

/* ARGSUSED */
void
AddSource(w, closure, call_data)
Widget w;
XtPointer closure, call_data;
{

  double_click = FALSE;
  LastClicked = w;

  if(edit_source == NULL) 
    edit_source = (Source)s_malloc(sizeof(_Source));

  edit_source->name = s_strdup("new.src");
  edit_source->directory = s_strdup(app_resources.userSourceDirectory);
  strncpy(edit_source->server, "localhost", STRINGSIZE);
  strncpy(edit_source->service, "8000", STRINGSIZE);
  strncpy(edit_source->database, "database_name", STRINGSIZE);
  edit_source->maintainer = s_strdup("");
  edit_source->description = s_strdup("");
  XwaisPrintf("Opening new source\n");
  PopupSource(edit_source);
}

void PopupSource(s)
Source s;
{
  Arg arglist[10];
  Cardinal num_args;

  if (s != NULL) {
    num_args = 0;
    XtSetArg(arglist[num_args], XtNtitle, s->name); num_args++;
    XtSetValues(sourcepopup, arglist, num_args);
    ReplaceText(snamewid, s->name);
    ReplaceText(serverwid, s->server);
    ReplaceText(servicewid, s->service);
    ReplaceText(dbwid, s->database);
    ReplaceText(costwid, s->cost);
    ReplaceText(unitwid, s->units);
    ReplaceText(maintainerwid, s->maintainer);
    if(s->description == NULL) s->description = s_strdup("");
    ReplaceAsciiText(descwid, s->description);
    XtPopup(sourcepopup, XtGrabNone);
  }
}

/* ARGSUSED */
void CloseSourceEdit(w, closure, call_data)
Widget w;
XtPointer closure, call_data;
{
  char name[STRINGSIZE];

  double_click = FALSE;
  LastClicked = w;

  if (edit_source != NULL) {
    strcpy(name, GetString(snamewid));

    if(!((strlen(name) > 4) && 
	 strstr(name, ".src") &&
	 (!strcmp(".src", strstr(name, ".src")))))
      strcat(name, ".src");

    if(edit_source->name != NULL) s_free(edit_source->name);
    edit_source->name = s_strdup(name);

    if (edit_source->maintainer != NULL) s_free(edit_source->maintainer);
    edit_source->maintainer = s_strdup(GetString(maintainerwid));

    if (edit_source->description != NULL) s_free(edit_source->description);
    edit_source->description = s_strdup(GetAsciiString(descwid));

    strncpy(edit_source->server, GetString(serverwid), STRINGSIZE);
    strncpy(edit_source->service, GetString(servicewid), STRINGSIZE);
    strncpy(edit_source->database, GetString(dbwid), STRINGSIZE);
    strncpy(edit_source->cost, GetString(costwid), STRINGSIZE);
    strncpy(edit_source->units, GetString(unitwid), STRINGSIZE);

    WriteSource(app_resources.userSourceDirectory, edit_source, TRUE);

    /* ScanDirs(NULL, NULL);*/
  }
  else XwaisPrintf("No currently selected source.  This shouldn't happen.\n");
  XtPopdown(sourcepopup);
}

/* ARGSUSED */
void CancelSourceEdit(w, closure, call_data)
Widget w;
XtPointer closure, call_data;
{
  SList s;

  double_click = FALSE;
  LastClicked = w;

  XtPopdown(sourcepopup);
}


syntax highlighted by Code2HTML, v. 0.9.1