#include "wimp.h"
#include "wimpt.h"
#include "win.h"
#include "event.h"
#include "baricon.h"
#include "resspr.h"
#include "res.h"
#include "menu.h"
#include "template.h"
#include "dbox.h"
#include "flex.h"
#include "akbd.h"

#include "showtext.h"

#include <stdlib.h>

/*************************** Statics etc. *************************/

#define TextName "Text"

/* Menu entires */
enum Iconbarmenu { Iconbarmenu_Info = 1, Iconbarmenu_Quit };

/* Dialogue box fields */
#define ProgInfo_Field    4

/* Version for info box */
static char *Version_String = "1.00 (29th December 1993)";

static menu menu_iconbar;

/********************** Window functions etc. *********************/

/* Display our text file in response to a click on the iconbar */
static void display_text(void)
{
  char name[256];

  res_findname(TextName, name);
  showtext_display(name, TextName);
}

/* Deal with non-menu icon bar clicks */
static void iconclick(wimp_i icon)
{
  display_text();
}

/* Display info dialogue box */
static void info_about_program(void)
{
  dbox d;

  if ((d = dbox_new("ProgInfo")) != NULL)
  {
    dbox_setfield(d, ProgInfo_Field, Version_String);
    dbox_show(d);
    dbox_fillin(d);
    dbox_dispose(&d);
  }
}

/* Handle icon bar menu clicks */
static void iconbar_menuproc(void *handle, char *hit)
{
  handle = handle;

  switch (hit[0])
  {
    case Iconbarmenu_Info:
      info_about_program();
      break;

    case Iconbarmenu_Quit:
      exit(0);
      break;
  }
}

static BOOL initialise(void)
{
  flex_init();
  wimpt_init("ShowText");
  res_init("ShowText");
  resspr_init();
  template_init();
  dbox_init();
  showtext_init();

  if (menu_iconbar = menu_new("ShowText", ">Info,Quit"), menu_iconbar == NULL)
    return FALSE;

  baricon("!showtext", (int)resspr_area(), iconclick);
  if (!event_attachmenu(win_ICONBAR, menu_iconbar, iconbar_menuproc, 0))
    return FALSE;

  /* All went alright, so return TRUE */
  return TRUE;
}

/* Perform initialisation, and assuming all is OK, just enter event loop
   (Event processor handles exit condition automatically) */
int main()
{
  if (initialise())
    {
      while(TRUE)
        event_process();
    }
  return 0; /* Don't complain if we can't initialise */
}
