/* nfstatus.c */

#include <stdio.h>
#include <string.h>

#include "event.h"
#include "gadgets.h"

#include "err.h"
#include "fade.h"
#include "msgtrans.h"
#include "nfchoices.h"
#include "nfstatus.h"

enum NFStatus_Gadgets {
  NFStatus_Group = 0,
  NFStatus_Message,
  NFStatus_Found = 5,
  NFStatus_Abort
};

static ObjectId nfstatus_id = NULL_ObjectId;

void nfstatus_idle()
{
  if (!nfstatus_id)
    return;
  nfstatus_setgroup("");
  E(displayfield_set_value(0, nfstatus_id, NFStatus_Message,
  	(char *) msgs_lookup("Idle")));
  nfstatus_setfound(0);
}

void nfstatus_busy()
{
  if (!nfstatus_id)
    return;
  nfstatus_setgroup("");
  nfstatus_blankmessage();
  nfstatus_setfound(0);
}

void nfstatus_setgroup(const char *group)
{
  if (nfstatus_id)
  E(displayfield_set_value(0, nfstatus_id, NFStatus_Group, (char *) group));
}

void nfstatus_setmessage(unsigned message, unsigned total)
{
  char msgstr[20];
  if (!nfstatus_id)
    return;
  sprintf(msgstr, "%d/%d", message, total);
  E(displayfield_set_value(0, nfstatus_id, NFStatus_Message, msgstr));
}

void nfstatus_setmessages(unsigned total)
{
  char msgstr[20];
  if (!nfstatus_id)
    return;
  sprintf(msgstr, "%d", total);
  E(displayfield_set_value(0, nfstatus_id, NFStatus_Message, msgstr));
}

void nfstatus_blankmessage()
{
  if (nfstatus_id)
    E(displayfield_set_value(0, nfstatus_id, NFStatus_Message, ""));
}

void nfstatus_setfound(int found)
{
  if (nfstatus_id)
    E(numberrange_set_value(0, nfstatus_id, NFStatus_Found, found));
}

void nfstatus_initialise()
{
  if (nfchoices.status)
    EF(toolbox_create_object(0, "FindStatus", &nfstatus_id));
}

void nfstatus_complete(int found)
{
  if (!nfstatus_id)
    return;
  nfstatus_setgroup("");
  E(displayfield_set_value(0, nfstatus_id, NFStatus_Message,
  	(char *) msgs_lookup("Complete")));
  nfstatus_setfound(found);
}

void nfstatus_show()
{
  if (!nfstatus_id)
    return;
  if (!nfchoices.statusx && !nfchoices.statusy)
    E(toolbox_show_object(0, nfstatus_id, Toolbox_ShowObject_Default, NULL,
    	NULL_ObjectId, NULL_ComponentId));
  else
  {
    int pos[2];
    pos[0] = nfchoices.statusx;
    pos[1] = nfchoices.statusy;
    EF(toolbox_show_object(0, nfstatus_id, Toolbox_ShowObject_TopLeft, pos,
    	NULL_ObjectId, NULL_ComponentId));
  }
}
