/* Emacs style mode select   -*- C++ -*- */
/*-----------------------------------------------------------------------------*/

/* $Id:$*/

/* Copyright (C) 1993-1996 by id Software, Inc.*/

/* This source is available for distribution and/or modification*/
/* only under the terms of the DOOM Source Code License as*/
/* published by id Software. All rights reserved.*/

/* The source is distributed in the hope that it will be useful,*/
/* but WITHOUT ANY WARRANTY; without even the implied warranty of*/
/* FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License*/
/* for more details.*/

/* DESCRIPTION:*/
/* 	The status bar widget code.*/

/*-----------------------------------------------------------------------------*/

#ifndef __STLIB__
#define __STLIB__


/* We are referring to patches.*/
#include "r_defs.h"



/* Background and foreground screen numbers*/

#define BG 4
#define FG 0




/* Typedefs of widgets*/


/* Number widget*/

typedef struct
{
    /* upper right-hand corner*/
    /*  of the number (right-justified)*/
    int		x;
    int		y;

    /* max # of digits in number*/
    int width;

    /* last number value*/
    int		oldnum;

    /* pointer to current value*/
    int*	num;

    /* pointer to boolean stating*/
    /*  whether to update number*/
    boolean*	on;

    /* list of patches for 0-9*/
    patch_t**	p;

    /* user data*/
    int data;

} st_number_t;



/* Percent widget ("child" of number widget,*/
/*  or, more precisely, contains a number widget.)*/
typedef struct
{
    /* number information*/
    st_number_t		n;

    /* percent sign graphic*/
    patch_t*		p;

} st_percent_t;



/* Multiple Icon widget*/
typedef struct
{
     /* center-justified location of icons*/
    int			x;
    int			y;

    /* last icon number*/
    int			oldinum;

    /* pointer to current icon*/
    int*		inum;

    /* pointer to boolean stating*/
    /*  whether to update icon*/
    boolean*		on;

    /* list of icons*/
    patch_t**		p;

    /* user data*/
    int			data;

} st_multicon_t;




/* Binary Icon widget*/

typedef struct
{
    /* center-justified location of icon*/
    int			x;
    int			y;

    /* last icon value*/
    int			oldval;

    /* pointer to current icon status*/
    boolean*		val;

    /* pointer to boolean*/
    /*  stating whether to update icon*/
    boolean*		on;


    patch_t*		p;	/* icon*/
    int			data;   /* user data*/

} st_binicon_t;




/* Widget creation, access, and update routines*/


/* Initializes widget library.*/
/* More precisely, initialize STMINUS,*/
/*  everything else is done somewhere else.*/

void STlib_init(void);



/* Number widget routines*/
void
STlib_initNum
( st_number_t*		n,
  int			x,
  int			y,
  patch_t**		pl,
  int*			num,
  boolean*		on,
  int			width );

void
STlib_updateNum
( st_number_t*		n,
  boolean		refresh );


/* Percent widget routines*/
void
STlib_initPercent
( st_percent_t*		p,
  int			x,
  int			y,
  patch_t**		pl,
  int*			num,
  boolean*		on,
  patch_t*		percent );


void
STlib_updatePercent
( st_percent_t*		per,
  int			refresh );


/* Multiple Icon widget routines*/
void
STlib_initMultIcon
( st_multicon_t*	mi,
  int			x,
  int			y,
  patch_t**		il,
  int*			inum,
  boolean*		on );


void
STlib_updateMultIcon
( st_multicon_t*	mi,
  boolean		refresh );

/* Binary Icon widget routines*/

void
STlib_initBinIcon
( st_binicon_t*		b,
  int			x,
  int			y,
  patch_t*		i,
  boolean*		val,
  boolean*		on );

void
STlib_updateBinIcon
( st_binicon_t*		bi,
  boolean		refresh );

#endif
/*-----------------------------------------------------------------------------*/

/* $Log:$*/

/*-----------------------------------------------------------------------------*/
