//Copyright Paul Reiche, Fred Ford. 1992-2002

/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef UQM_MENUSTAT_H_
#define UQM_MENUSTAT_H_

#include "libs/gfxlib.h"
#include "libs/sndlib.h"
#include "flash.h"

#if defined(__cplusplus)
extern "C" {
#endif

typedef struct menu_state
{
	// Standard field required by DoInput()
	BOOLEAN (*InputFunc) (struct menu_state *pMS);

	SIZE Initialized;

	BYTE CurState;
	FRAME CurFrame;
	STRING CurString;
	POINT first_item;
	SIZE delta_item;

	FRAME ModuleFrame;
	RECT flash_rect0, flash_rect1, flash_rect2;
	FRAME flash_frame0, flash_frame1;
	FlashContext *flashContext;

	MUSIC_REF hMusic;

	// For private use by various menus
	// Usually, a menu associates its internal data struct using this
	void *privData;

} MENU_STATE;

// XXX: Should probably go to menu.h (does not yet exist)
enum
{
	PM_SCAN = 0,
	PM_STARMAP,
	PM_DEVICES,
	PM_CARGO,
	PM_ROSTER,
	PM_GAME_MENU,
	PM_NAVIGATE,
	
	PM_MIN_SCAN,
	PM_ENE_SCAN,
	PM_BIO_SCAN,
	PM_EXIT_SCAN,
	PM_AUTO_SCAN,
	PM_LAUNCH_LANDER,

	PM_SAVE_GAME,
	PM_LOAD_GAME,
	PM_QUIT_GAME,
	PM_CHANGE_SETTINGS,
	PM_EXIT_GAME_MENU,

	PM_CONVERSE,
	PM_ATTACK,
	PM_ENCOUNTER_GAME_MENU,
	
	PM_FUEL,
	PM_MODULE,
	PM_OUTFIT_GAME_MENU,
	PM_EXIT_OUTFIT,
	
	PM_CREW,
	PM_SHIPYARD_GAME_MENU,
	PM_EXIT_SHIPYARD,
	
	PM_SOUND_ON,
	PM_SOUND_OFF,
	PM_MUSIC_ON,
	PM_MUSIC_OFF,
	PM_CYBORG_OFF,
	PM_CYBORG_NORMAL,
	PM_CYBORG_DOUBLE,
	PM_CYBORG_SUPER,

	PM_READ_VERY_SLOW,
	PM_READ_SLOW,
	PM_READ_MODERATE,
	PM_READ_FAST,
	PM_READ_VERY_FAST,

	PM_CHANGE_CAPTAIN,
	PM_CHANGE_SHIP,
	PM_EXIT_SETTINGS,

	PM_ALT_SCAN,
	PM_ALT_STARMAP,
	PM_ALT_MANIFEST,
	PM_ALT_GAME_MENU,
	PM_ALT_NAVIGATE,

	PM_ALT_CARGO,
	PM_ALT_DEVICES,
	PM_ALT_ROSTER,
	PM_ALT_EXIT_MANIFEST,

	PM_ALT_MSCAN,
	PM_ALT_ESCAN,
	PM_ALT_BSCAN,
	PM_ALT_ASCAN,
	PM_ALT_DISPATCH,
	PM_ALT_EXIT_SCAN,
};

enum
{
	GAMESTR_GAME_MENU = 5,
	GAMESTR_EXIT_MENU = 10,
	GAMESTR_CONVERSE = 17,
	GAMESTR_ATTACK,
	GAMESTR_FUEL,
	GAMESTR_MODULE,
	GAMESTR_CREW,
	GAMESTR_SND_ON,
	GAMESTR_SND_OFF,
	GAMESTR_MUS_ON,
	GAMESTR_MUS_OFF,
	GAMESTR_COMBAT,
	GAMESTR_READING,
	GAMESTR_CHANGE_CAP,
	GAMESTR_CHANGE_SIS,
};

extern BOOLEAN DoMenuChooser (MENU_STATE *pMS, BYTE BaseState);
extern void DrawMenuStateStrings (BYTE beg_index, SWORD NewState);
extern void DrawMineralHelpers (void);
extern void DrawBorder (BYTE Visible);

#if defined(__cplusplus)
}
#endif

#endif /* UQM_MENUSTAT_H_ */