mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
UTIL is never used, and JA2 is always used. assumption being we'll never make 1.13 for Wizardry 8. video2.h doesn't exist, which prevented me from deleting it.
361 lines
16 KiB
C++
361 lines
16 KiB
C++
//*****************************************************************************************************
|
|
// Button System.h
|
|
//
|
|
// by Kris Morness (originally created by Bret Rowden)
|
|
//*****************************************************************************************************
|
|
|
|
#ifndef __BUTTON_SYSTEM_H
|
|
#define __BUTTON_SYSTEM_H
|
|
|
|
#include "vobject.h"
|
|
#include "mousesystem.h"
|
|
#include "soundman.h"
|
|
#include "Button Sound Control.h"
|
|
|
|
|
|
// Moved here from Button System.c by DB 99/01/07
|
|
// Names of the default generic button image files.
|
|
#define DEFAULT_GENERIC_BUTTON_OFF "GENBUTN.STI"
|
|
#define DEFAULT_GENERIC_BUTTON_ON "GENBUTN2.STI"
|
|
#define DEFAULT_GENERIC_BUTTON_OFF_HI "GENBUTN3.STI"
|
|
#define DEFAULT_GENERIC_BUTTON_ON_HI "GENBUTN4.STI"
|
|
|
|
#define BUTTON_TEXT_LEFT -1
|
|
#define BUTTON_TEXT_CENTER 0
|
|
#define BUTTON_TEXT_RIGHT 1
|
|
|
|
#define TEXT_LJUSTIFIED BUTTON_TEXT_LEFT
|
|
#define TEXT_CJUSTIFIED BUTTON_TEXT_CENTER
|
|
#define TEXT_RJUSTIFIED BUTTON_TEXT_RIGHT
|
|
|
|
|
|
// Some GUI_BUTTON system defines
|
|
#define BUTTON_USE_DEFAULT -1
|
|
#define BUTTON_NO_FILENAME NULL
|
|
#define BUTTON_NO_CALLBACK NULL
|
|
#define BUTTON_NO_IMAGE -1
|
|
#define BUTTON_NO_SLOT -1
|
|
|
|
#define BUTTON_INIT 1
|
|
#define BUTTON_WAS_CLICKED 2
|
|
|
|
//affects how the button is rendered.
|
|
#define BUTTON_TYPES ( BUTTON_QUICK | BUTTON_GENERIC | BUTTON_HOT_SPOT | BUTTON_CHECKBOX )
|
|
//affects how the button is processed
|
|
#define BUTTON_TYPE_MASK (BUTTON_NO_TOGGLE| BUTTON_ALLOW_DISABLED_CALLBACK | BUTTON_CHECKBOX | BUTTON_IGNORE_CLICKS )
|
|
|
|
//button flags
|
|
#define BUTTON_TOGGLE 0x00000000
|
|
#define BUTTON_QUICK 0x00000000
|
|
#define BUTTON_ENABLED 0x00000001
|
|
#define BUTTON_CLICKED_ON 0x00000002
|
|
#define BUTTON_NO_TOGGLE 0x00000004
|
|
#define BUTTON_CLICK_CALLBACK 0x00000008
|
|
#define BUTTON_MOVE_CALLBACK 0x00000010
|
|
#define BUTTON_GENERIC 0x00000020
|
|
#define BUTTON_HOT_SPOT 0x00000040
|
|
#define BUTTON_SELFDELETE_IMAGE 0x00000080
|
|
#define BUTTON_DELETION_PENDING 0x00000100
|
|
#define BUTTON_ALLOW_DISABLED_CALLBACK 0x00000200
|
|
#define BUTTON_DIRTY 0x00000400
|
|
#define BUTTON_SAVEBACKGROUND 0x00000800
|
|
#define BUTTON_CHECKBOX 0x00001000
|
|
#define BUTTON_NEWTOGGLE 0x00002000
|
|
#define BUTTON_FORCE_UNDIRTY 0x00004000 // no matter what happens this buttons does NOT get marked dirty
|
|
#define BUTTON_IGNORE_CLICKS 0x00008000 // Ignore any clicks on this button
|
|
#define BUTTON_16BPPCOLOURTEXT 0x00010000 // Use 16 bit colours for the text of this button
|
|
#define BUTTON_DISABLED_CALLBACK 0x80000000
|
|
|
|
#define BUTTON_SOUND_NONE 0x00
|
|
#define BUTTON_SOUND_CLICKED_ON 0x01
|
|
#define BUTTON_SOUND_CLICKED_OFF 0x02
|
|
#define BUTTON_SOUND_MOVED_ONTO 0x04
|
|
#define BUTTON_SOUND_MOVED_OFF_OF 0x08
|
|
#define BUTTON_SOUND_DISABLED_CLICK 0x10
|
|
#define BUTTON_SOUND_DISABLED_MOVED_ONTO 0x20
|
|
#define BUTTON_SOUND_DISABLED_MOVED_OFF_OF 0x40
|
|
#define BUTTON_SOUND_ALREADY_PLAYED 0X80
|
|
|
|
#define BUTTON_SOUND_ALL_EVENTS 0xff
|
|
|
|
|
|
// Internal use!
|
|
#define GUI_SND_CLK_ON BUTTON_SOUND_CLICKED_ON
|
|
#define GUI_SND_CLK_OFF BUTTON_SOUND_CLICKED_OFF
|
|
#define GUI_SND_MOV_ON BUTTON_SOUND_MOVED_ONTO
|
|
#define GUI_SND_MOV_OFF BUTTON_SOUND_MOVED_OFF_OF
|
|
#define GUI_SND_DCLK BUTTON_SOUND_DISABLED_CLICK
|
|
#define GUI_SND_DMOV BUTTON_SOUND_DISABLED_MOVED_ONTO
|
|
|
|
extern UINT32 ButtonDestBuffer;
|
|
|
|
// GUI_BUTTON callback function type
|
|
typedef void (*GUI_CALLBACK)(struct _GUI_BUTTON *,INT32);
|
|
|
|
// GUI_BUTTON structure definitions.
|
|
typedef struct _GUI_BUTTON {
|
|
INT32 IDNum; // ID Number, contains it's own button number
|
|
UINT32 ImageNum; // Image number to use (see DOCs for details)
|
|
MOUSE_REGION Area; // Mouse System's mouse region to use for this button
|
|
GUI_CALLBACK ClickCallback; // Button Callback when button is clicked
|
|
GUI_CALLBACK MoveCallback; // Button Callback when mouse moved on this region
|
|
INT16 Cursor; // Cursor to use for this button
|
|
UINT32 uiFlags; // Button state flags etc.( 32-bit )
|
|
UINT32 uiOldFlags; // Old flags from previous render loop
|
|
INT16 XLoc; // Coordinates where button is on the screen
|
|
INT16 YLoc;
|
|
INT32 UserData[4]; // Place holder for user data etc.
|
|
INT16 Group; // Group this button belongs to (see DOCs)
|
|
INT8 bDefaultStatus;
|
|
//Button disabled style
|
|
INT8 bDisabledStyle;
|
|
//For buttons with text
|
|
CHAR16 *string; //the string
|
|
UINT16 usFont; //font for text
|
|
BOOLEAN fMultiColor; //font is a multi-color font
|
|
INT16 sForeColor; //text colors if there is text
|
|
INT16 sShadowColor;
|
|
INT16 sForeColorDown; //text colors when button is down (optional)
|
|
INT16 sShadowColorDown;
|
|
INT16 sForeColorHilited; //text colors when button is down (optional)
|
|
INT16 sShadowColorHilited;
|
|
INT8 bJustification; // BUTTON_TEXT_LEFT, BUTTON_TEXT_CENTER, BUTTON_TEXT_RIGHT
|
|
INT8 bTextXOffset;
|
|
INT8 bTextYOffset;
|
|
INT8 bTextXSubOffSet;
|
|
INT8 bTextYSubOffSet;
|
|
BOOLEAN fShiftText;
|
|
INT16 sWrappedWidth;
|
|
//For buttons with icons (don't confuse this with quickbuttons which have up to 5 states )
|
|
INT32 iIconID;
|
|
INT16 usIconIndex;
|
|
INT8 bIconXOffset; //-1 means horizontally centered
|
|
INT8 bIconYOffset; //-1 means vertically centered
|
|
BOOLEAN fShiftImage; //if true, icon is shifted +1,+1 when button state is down.
|
|
|
|
UINT8 ubToggleButtonOldState; // Varibles for new toggle buttons that work
|
|
UINT8 ubToggleButtonActivated;
|
|
|
|
INT32 BackRect; // Handle to a Background Rectangle
|
|
UINT8 ubSoundSchemeID;
|
|
} GUI_BUTTON;
|
|
|
|
|
|
#define MAX_BUTTONS 400
|
|
|
|
//extern GUI_BUTTON *ButtonList[MAX_BUTTONS]; // Button System's Main Button List
|
|
extern std::vector<GUI_BUTTON *> ButtonList;
|
|
|
|
#define GetButtonPtr(x) (((x>=0) && (x<MAX_BUTTONS))? ButtonList[x] : NULL)
|
|
|
|
// Struct definition for the QuickButton pictures.
|
|
typedef struct {
|
|
HVOBJECT vobj; // The Image itself
|
|
INT32 Grayed; // Index to use for a "Grayed-out" button
|
|
INT32 OffNormal; // Index to use when button is OFF
|
|
INT32 OffHilite; // Index to use when button is OFF w/ hilite on it
|
|
INT32 OnNormal; // Index to use when button is ON
|
|
INT32 OnHilite; // Index to use when button is ON w/ hilite on it
|
|
UINT32 MaxWidth; // Width of largest image in use
|
|
UINT32 MaxHeight; // Height of largest image in use
|
|
UINT32 fFlags; // Special image flags
|
|
} BUTTON_PICS;
|
|
|
|
#define MAX_BUTTON_PICS 256
|
|
|
|
//extern BUTTON_PICS ButtonPictures[MAX_BUTTON_PICS];
|
|
extern std::vector<BUTTON_PICS> ButtonPictures;
|
|
|
|
|
|
// Function protos for button system
|
|
BOOLEAN InitializeButtonImageManager(INT32 DefaultBuffer, INT32 DefaultPitch, INT32 DefaultBPP);
|
|
void ShutdownButtonImageManager(void);
|
|
BOOLEAN InitButtonSystem(void);
|
|
void ShutdownButtonSystem(void);
|
|
|
|
INT16 FindFreeIconSlot(void);
|
|
INT32 FindFreeButtonSlot(void);
|
|
INT16 FindFreeGenericSlot(void);
|
|
INT16 FindFreeIconSlot(void);
|
|
INT32 GetNextButtonNumber(void);
|
|
|
|
// Now used by Wizardry -- DB
|
|
void SetButtonFastHelpText(INT32 iButton, STR16 Text);
|
|
|
|
#ifdef _JA2_RENDER_DIRTY
|
|
void SetBtnHelpEndCallback( INT32 iButton, MOUSE_HELPTEXT_DONE_CALLBACK CallbackFxn );
|
|
//void DisplayFastHelp(GUI_BUTTON *b);
|
|
void RenderButtonsFastHelp(void);
|
|
|
|
#define RenderButtonsFastHelp() RenderFastHelp()
|
|
|
|
BOOLEAN SetButtonSavedRect( INT32 iButton );
|
|
void FreeButtonSavedRect( INT32 iButton );
|
|
|
|
#endif
|
|
|
|
INT16 LoadGenericButtonIcon(STR8 filename);
|
|
|
|
BOOLEAN UnloadGenericButtonIcon(INT16 GenImg);
|
|
|
|
INT32 LoadButtonImage(STR8 filename, INT32 Grayed, INT32 OffNormal, INT32 OffHilite, INT32 OnNormal, INT32 OnHilite);
|
|
INT32 UseLoadedButtonImage(INT32 LoadedImg, INT32 Grayed, INT32 OffNormal, INT32 OffHilite, INT32 OnNormal, INT32 OnHilite);
|
|
INT32 UseVObjAsButtonImage(HVOBJECT hVObject, INT32 Grayed, INT32 OffNormal, INT32 OffHilite, INT32 OnNormal, INT32 OnHilite);
|
|
void UnloadButtonImage(INT32 Index);
|
|
INT16 LoadGenericButtonImages(STR8 GrayName,STR8 OffNormName, STR8 OffHiliteName, STR8 OnNormName,STR8 OnHiliteName,STR8 BkGrndName,INT16 Index,INT16 OffsetX, INT16 OffsetY);
|
|
BOOLEAN UnloadGenericButtonImage(INT16 GenImg);
|
|
|
|
BOOLEAN SetButtonDestBuffer(UINT32 DestBuffer);
|
|
|
|
BOOLEAN EnableButton(INT32 iButtonID);
|
|
BOOLEAN DisableButton(INT32 iButtonID);
|
|
void RemoveButton(INT32 iButtonID );
|
|
void HideButton( INT32 iButtonID );
|
|
void ShowButton( INT32 iButton );
|
|
|
|
void RenderButtons(void);
|
|
BOOLEAN DrawButton(INT32 iButtonID);
|
|
void DrawButtonFromPtr(GUI_BUTTON *b);
|
|
|
|
//Base button types
|
|
void DrawGenericButton(GUI_BUTTON *b);
|
|
void DrawQuickButton(GUI_BUTTON *b);
|
|
void DrawCheckBoxButton( GUI_BUTTON *b );
|
|
//Additional layers on buttons that can exist in any combination on generic or quick buttons
|
|
//To do so, use the new specify functions below.
|
|
void DrawIconOnButton(GUI_BUTTON *b);
|
|
void DrawTextOnButton(GUI_BUTTON *b);
|
|
|
|
extern BOOLEAN gfRenderHilights;
|
|
#define EnableHilightsAndHelpText() gfRenderHilights = TRUE;
|
|
#define DisableHilightsAndHelpText() gfRenderHilights = FALSE;
|
|
|
|
//Providing you have allocated your own image, this is a somewhat simplified function.
|
|
INT32 QuickCreateButton(UINT32 Image, INT16 xloc, INT16 yloc, INT32 Type,INT16 Priority,GUI_CALLBACK MoveCallback,GUI_CALLBACK ClickCallback);
|
|
|
|
//A hybrid of QuickCreateButton. Takes a lot less parameters, but makes more assumptions. It self manages the
|
|
//loading, and deleting of the image. The size of the image determines the size of the button. It also uses
|
|
//the default move callback which emulates Win95. Finally, it sets the priority to normal. The function you
|
|
//choose also determines the type of button (toggle, notoggle, or newtoggle)
|
|
INT32 CreateEasyNoToggleButton ( INT32 x, INT32 y, STR8 filename, GUI_CALLBACK ClickCallback );
|
|
|
|
INT32 CreateEasyToggleButton ( INT32 x, INT32 y, STR8 filename, GUI_CALLBACK ClickCallback );
|
|
|
|
INT32 CreateEasyNewToggleButton( INT32 x, INT32 y, STR8 filename, GUI_CALLBACK ClickCallback );
|
|
//Same as above, but accepts specify toggle type
|
|
|
|
INT32 CreateEasyButton( INT32 x, INT32 y, STR8 filename, INT32 Type, GUI_CALLBACK ClickCallback);
|
|
//Same as above, but accepts priority specification.
|
|
INT32 CreateSimpleButton( INT32 x, INT32 y, STR8 filename, INT32 Type, INT16 Priority, GUI_CALLBACK ClickCallback );
|
|
|
|
INT32 CreateCheckBoxButton( INT16 x, INT16 y, STR8 filename, INT16 Priority, GUI_CALLBACK ClickCallback );
|
|
|
|
INT32 CreateIconButton(INT16 Icon,INT16 IconIndex,INT16 GenImg,INT16 xloc,INT16 yloc,INT16 w,INT16 h,INT32 Type,INT16 Priority,GUI_CALLBACK MoveCallback,GUI_CALLBACK ClickCallback);
|
|
INT32 CreateHotSpot(INT16 xloc, INT16 yloc, INT16 Width, INT16 Height,INT16 Priority,GUI_CALLBACK MoveCallback,GUI_CALLBACK ClickCallback);
|
|
|
|
INT32 CreateTextButton(STR16 string, UINT32 uiFont, INT16 sForeColor, INT16 sShadowColor, INT16 GenImg, INT16 xloc, INT16 yloc, INT16 w, INT16 h, INT32 Type, INT16 Priority,GUI_CALLBACK MoveCallback, GUI_CALLBACK ClickCallback);
|
|
INT32 CreateIconAndTextButton( INT32 Image, const STR16 string, UINT32 uiFont,
|
|
INT16 sForeColor, INT16 sShadowColor,
|
|
INT16 sForeColorDown, INT16 sShadowColorDown,
|
|
INT8 bJustification,
|
|
INT16 xloc, INT16 yloc, INT32 Type, INT16 Priority,
|
|
GUI_CALLBACK MoveCallback,GUI_CALLBACK ClickCallback);
|
|
|
|
//New functions
|
|
void SpecifyButtonText( INT32 iButtonID, STR16 string );
|
|
void SpecifyButtonFont( INT32 iButtonID, UINT32 uiFont );
|
|
void SpecifyButtonMultiColorFont(INT32 iButtonID, BOOLEAN fMultiColor);
|
|
void SpecifyButtonUpTextColors( INT32 iButtonID, INT16 sForeColor, INT16 sShadowColor );
|
|
void SpecifyButtonDownTextColors( INT32 iButtonID, INT16 sForeColorDown, INT16 sShadowColorDown );
|
|
void SpecifyButtonHilitedTextColors( INT32 iButtonID, INT16 sForeColorHilited, INT16 sShadowColorHilited );
|
|
void SpecifyButtonTextJustification( INT32 iButtonID, INT8 bJustification );
|
|
void SpecifyGeneralButtonTextAttributes( INT32 iButtonID, STR16 string, INT32 uiFont,
|
|
INT16 sForeColor, INT16 sShadowColor );
|
|
void SpecifyFullButtonTextAttributes( INT32 iButtonID, STR16 string, INT32 uiFont,
|
|
INT16 sForeColor, INT16 sShadowColor,
|
|
INT16 sForeColorDown, INT16 sShadowColorDown, INT8 bJustification );
|
|
void SpecifyGeneralButtonTextAttributes( INT32 iButtonID, STR16 string, INT32 uiFont,
|
|
INT16 sForeColor, INT16 sShadowColor );
|
|
void SpecifyButtonTextOffsets( INT32 iButtonID, INT8 bTextXOffset, INT8 bTextYOffset, BOOLEAN fShiftText );
|
|
void SpecifyButtonTextSubOffsets( INT32 iButtonID, INT8 bTextXOffset, INT8 bTextYOffset, BOOLEAN fShiftText );
|
|
void SpecifyButtonTextWrappedWidth(INT32 iButtonID, INT16 sWrappedWidth);
|
|
|
|
void SpecifyButtonSoundScheme( INT32 iButtonID, INT8 bSoundScheme );
|
|
//OJW - 20081224
|
|
BOOLEAN SpecifyButtonImage( INT32 iButtonID, UINT32 iButtonImageID);
|
|
BOOLEAN SpecifyButtonImage( GUI_BUTTON *b, UINT32 iButtonImageID);
|
|
void PlayButtonSound( INT32 iButtonID, INT32 iSoundType );
|
|
|
|
void AllowDisabledButtonFastHelp( INT32 iButtonID, BOOLEAN fAllow );
|
|
|
|
enum{
|
|
DEFAULT_STATUS_NONE,
|
|
DEFAULT_STATUS_DARKBORDER, //shades the borders 2 pixels deep
|
|
DEFAULT_STATUS_DOTTEDINTERIOR, //draws the familiar dotted line in the interior portion of the button.
|
|
DEFAULT_STATUS_WINDOWS95, //both DARKBORDER and DOTTEDINTERIOR
|
|
};
|
|
void GiveButtonDefaultStatus( INT32 iButtonID, INT32 iDefaultStatus );
|
|
void RemoveButtonDefaultStatus( INT32 iButtonID );
|
|
|
|
enum //for use with SpecifyDisabledButtonStyle
|
|
{
|
|
DISABLED_STYLE_NONE, //for dummy buttons, panels, etc. Always displays normal state.
|
|
DISABLED_STYLE_DEFAULT, //if button has text then shade, else hatch
|
|
DISABLED_STYLE_HATCHED, //always hatches the disabled button
|
|
DISABLED_STYLE_SHADED //always shades the disabled button 25% darker
|
|
};
|
|
void SpecifyDisabledButtonStyle( INT32 iButtonID, INT8 bStyle );
|
|
|
|
|
|
void RemoveTextFromButton( INT32 iButtonID );
|
|
void RemoveIconFromButton( INT32 iButtonID );
|
|
|
|
//Note: Text is always on top
|
|
//If fShiftImage is true, then the image will shift down one pixel and right one pixel
|
|
//just like the text does.
|
|
BOOLEAN SpecifyButtonIcon( INT32 iButtonID, INT32 iVideoObjectID, UINT16 usVideoObjectIndex,
|
|
INT8 bXOffset, INT8 bYOffset, BOOLEAN fShiftImage );
|
|
|
|
|
|
|
|
void SetButtonPosition(INT32 iButtonID,INT16 x, INT16 y);
|
|
void ResizeButton(INT32 iButtonID,INT16 w, INT16 h);
|
|
|
|
|
|
void QuickButtonCallbackMMove(MOUSE_REGION *reg,INT32 reason);
|
|
void QuickButtonCallbackMButn(MOUSE_REGION *reg,INT32 reason);
|
|
|
|
BOOLEAN SetButtonCursor(INT32 iBtnId, UINT16 crsr);
|
|
void MSYS_SetBtnUserData(INT32 iButtonNum,INT32 index,INT32 userdata);
|
|
INT32 MSYS_GetBtnUserData(GUI_BUTTON *b,INT32 index);
|
|
void MarkAButtonDirty( INT32 iButtonNum ); // will mark only selected button dirty
|
|
void MarkButtonsDirty(void);// Function to mark buttons dirty ( all will redraw at next RenderButtons )
|
|
void PausedMarkButtonsDirty( void ); // mark buttons dirty for button render the frame after the next
|
|
void UnMarkButtonDirty( INT32 iButtonIndex ); // unmark button
|
|
void UnmarkButtonsDirty( void ); // unmark ALL the buttoms on the screen dirty
|
|
void ForceButtonUnDirty( INT32 iButtonIndex ); // forces button undirty no matter the reason, only lasts one frame
|
|
|
|
// DB 98-05-05
|
|
BOOLEAN GetButtonArea(INT32 iButtonID, SGPRect *pRect);
|
|
// DB 99-01-13
|
|
INT32 GetButtonWidth(INT32 iButtonID);
|
|
INT32 GetButtonHeight(INT32 iButtonID);
|
|
|
|
// DB 99-08-27
|
|
INT32 GetButtonX(INT32 iButtonID);
|
|
INT32 GetButtonY(INT32 iButtonID);
|
|
|
|
void BtnGenericMouseMoveButtonCallback(GUI_BUTTON *btn,INT32 reason);
|
|
#define DEFAULT_MOVE_CALLBACK BtnGenericMouseMoveButtonCallback
|
|
|
|
|
|
void DrawCheckBoxButtonOn( INT32 iButtonID );
|
|
|
|
void DrawCheckBoxButtonOff( INT32 iButtonID );
|
|
|
|
extern UINT16 GetWidthOfButtonPic( UINT16 usButtonPicID, INT32 iSlot );
|
|
extern UINT16 GetHeightOfButtonPic( UINT16 usButtonPicID, INT32 iSlot );
|
|
|
|
#endif
|
|
|