From 0a748a02b3dfbbb9f374afaff6ea9c558145d460 Mon Sep 17 00:00:00 2001 From: Flugente Date: Sat, 25 Jul 2015 17:34:18 +0000 Subject: [PATCH] Message boxes can have a dropdown. For usage, see http://thepit.ja-galaxy-forum.com/index.php?t=msg&th=20659&goto=341863&#msg_341863 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7935 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Laptop/DropDown.cpp | 14 ++--- Laptop/DropDown.h | 2 + MessageBoxScreen.cpp | 132 +++++++++++++++++++++++-------------------- MessageBoxScreen.h | 38 +++++++------ 4 files changed, 99 insertions(+), 87 deletions(-) diff --git a/Laptop/DropDown.cpp b/Laptop/DropDown.cpp index 5323410d..c6ebf292 100644 --- a/Laptop/DropDown.cpp +++ b/Laptop/DropDown.cpp @@ -145,17 +145,17 @@ DropDownBase::Create(UINT16 sX, UINT16 sY) gDropObj = (void*) this; - MSYS_DefineRegion( &mSelectedOpenDropDownRegion, GetX( ) + musWidth, GetY( ), GetX( ) + musWidth + musArrowWidth, GetY( ) + DEF_SCROLL_ARROW_HEIGHT, MSYS_PRIORITY_HIGH, + MSYS_DefineRegion( &mSelectedOpenDropDownRegion, GetX( ) + musWidth, GetY( ), GetX( ) + musWidth + musArrowWidth, GetY( ) + DEF_SCROLL_ARROW_HEIGHT, MSYS_PRIORITY_HIGHEST, CURSOR_WWW, MSYS_NO_CALLBACK, CallBackWrapper((void*) this, DROPDOWN_OPEN, &DropDownBase::Dummyfunc) ); MSYS_AddRegion(&mSelectedOpenDropDownRegion); //click anywhere on the screen to close the window( only when the drop down window is active) - MSYS_DefineRegion( &mSelectedCloseDropDownRegion, LAPTOP_SCREEN_UL_X, LAPTOP_SCREEN_WEB_UL_Y , LAPTOP_SCREEN_LR_X, LAPTOP_SCREEN_WEB_LR_Y, MSYS_PRIORITY_HIGH-1, + MSYS_DefineRegion( &mSelectedCloseDropDownRegion, LAPTOP_SCREEN_UL_X, LAPTOP_SCREEN_WEB_UL_Y, LAPTOP_SCREEN_LR_X, LAPTOP_SCREEN_WEB_LR_Y, MSYS_PRIORITY_HIGHEST, CURSOR_LAPTOP_SCREEN, MSYS_NO_CALLBACK, CallBackWrapper((void*) this, DROPDOWN_CLOSE, &DropDownBase::Dummyfunc) ); MSYS_AddRegion(&mSelectedCloseDropDownRegion); MSYS_DisableRegion(&mSelectedCloseDropDownRegion); - MSYS_DefineRegion( &mBubbleHelpRegion, GetX( ), GetY( ), GetX( ) + musWidth, GetY( ) + DEF_SCROLL_ARROW_HEIGHT, MSYS_PRIORITY_HIGH, + MSYS_DefineRegion( &mBubbleHelpRegion, GetX( ), GetY( ), GetX( ) + musWidth, GetY( ) + DEF_SCROLL_ARROW_HEIGHT, MSYS_PRIORITY_HIGHEST, CURSOR_WWW, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK ); MSYS_AddRegion(&mBubbleHelpRegion); @@ -176,7 +176,7 @@ DropDownBase::Create_Drop() for ( i = 0; i< mNumDisplayedEntries; ++i ) { - MSYS_DefineRegion( &mDropDownRegion[i], usPosX, (UINT16)(usPosY+4), (UINT16)(usPosX+musWidth-6), (UINT16)(usPosY+musFontHeight+7), MSYS_PRIORITY_HIGH, + MSYS_DefineRegion( &mDropDownRegion[i], usPosX, (UINT16)(usPosY + 4), (UINT16)(usPosX + musWidth - 6), (UINT16)(usPosY + musFontHeight + 7), MSYS_PRIORITY_HIGHEST, CURSOR_WWW, CallBackWrapper((void*) this, DROPDOWN_MOVEMENT, &DropDownBase::Dummyfunc), CallBackWrapper((void*) this, DROPDOWN_REGION, &DropDownBase::Dummyfunc)); MSYS_AddRegion(&mDropDownRegion[i]); MSYS_SetRegionUserData( &mDropDownRegion[ i ], 0, i); @@ -191,7 +191,7 @@ DropDownBase::Create_Drop() usPosY = musUpArrowY; for(i=0; i<2; ++i) { - MSYS_DefineRegion( &mgSelectedUpDownArrowOnScrollAreaRegion[i], usPosX, usPosY, (UINT16)(usPosX+musWidth), (UINT16)(usPosY+DEF_SCROLL_ARROW_HEIGHT), MSYS_PRIORITY_HIGH, + MSYS_DefineRegion( &mgSelectedUpDownArrowOnScrollAreaRegion[i], usPosX, usPosY, (UINT16)(usPosX + musWidth), (UINT16)(usPosY + DEF_SCROLL_ARROW_HEIGHT), MSYS_PRIORITY_HIGHEST, CURSOR_WWW, MSYS_NO_CALLBACK, CallBackWrapper((void*) this, DROPDOWN_ARROW, &DropDownBase::Dummyfunc)); MSYS_AddRegion(&mgSelectedUpDownArrowOnScrollAreaRegion[i]); MSYS_SetRegionUserData( &mgSelectedUpDownArrowOnScrollAreaRegion[ i ], 0, i); @@ -209,7 +209,7 @@ DropDownBase::Create_Drop() usHeight = ( musAreaHeight - DEF_SCROLL_ARROW_HEIGHT - 4 ) / (mNumDisplayedEntries); for ( i = 0; iiTop; @@ -237,11 +237,15 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN if( ubStyle == MSG_BOX_BASIC_MEDIUM_BUTTONS ) heightincrease = 120; else - heightincrease = 50; + heightincrease = 50; } + if ( usFlags & MSG_BOX_FLAG_GENERIC_SIXTEEN_BUTTONS ) heightincrease = 90; + if ( usFlags & MSG_BOX_FLAG_DROPDOWN ) + heightincrease = 130; + UINT16 usMBWidth=MSGBOX_DEFAULT_WIDTH; BOOLEAN bFixedWidth = FALSE; // sevenfm: custom width for 16-medium-button messagebox @@ -262,9 +266,9 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN if( gMsgBox.iBoxId == -1 ) { - #ifdef JA2BETAVERSION - AssertMsg( 0, "Failed in DoMessageBox(). Probable reason is because the string was too large to fit in max message box size." ); - #endif +#ifdef JA2BETAVERSION + AssertMsg( 0, "Failed in DoMessageBox(). Probable reason is because the string was too large to fit in max message box size." ); +#endif return 0; } @@ -288,7 +292,6 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN fMapPanelDirty = TRUE; } - // Set pending screen SetPendingNewScreen( MSG_BOX_SCREEN); @@ -315,10 +318,9 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN UnLockVideoSurface( gMsgBox.uiSaveBuffer ); UnLockVideoSurface( FRAME_BUFFER ); - + // Create top-level mouse region - MSYS_DefineRegion( &(gMsgBox.BackRegion), 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, MSYS_PRIORITY_HIGHEST, - usCursor, MSYS_NO_CALLBACK, MsgBoxClickCallback ); + MSYS_DefineRegion( &(gMsgBox.BackRegion), 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, MSYS_PRIORITY_HIGHEST - 1, usCursor, MSYS_NO_CALLBACK, MsgBoxClickCallback ); if( gGameSettings.fOptions[ TOPTION_DONT_MOVE_MOUSE ] == FALSE ) { @@ -510,39 +512,39 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN } else { - sBlankSpace = usTextBoxWidth - MSGBOX_SMALL_BUTTON_WIDTH * 4 - MSGBOX_SMALL_BUTTON_X_SEP * 3; - sButtonX = sBlankSpace / 2; - sButtonY = usTextBoxHeight - MSGBOX_BUTTON_HEIGHT - 10 - heightincrease; - sButtonY -= MSGBOX_SMALL_BUTTON_WIDTH - MSGBOX_SMALL_BUTTON_X_SEP; - - for ( INT8 i = 0; i < 2; ++i) - { - // new row - sButtonY += MSGBOX_SMALL_BUTTON_WIDTH; - - // begin from the front + sBlankSpace = usTextBoxWidth - MSGBOX_SMALL_BUTTON_WIDTH * 4 - MSGBOX_SMALL_BUTTON_X_SEP * 3; sButtonX = sBlankSpace / 2; + sButtonY = usTextBoxHeight - MSGBOX_BUTTON_HEIGHT - 10 - heightincrease; + sButtonY -= MSGBOX_SMALL_BUTTON_WIDTH - MSGBOX_SMALL_BUTTON_X_SEP; - for ( INT8 j = 0; j < 4; ++j) + for ( INT8 i = 0; i < 2; ++i) { - INT8 k = 4*i + j; + // new row + sButtonY += MSGBOX_SMALL_BUTTON_WIDTH; - gMsgBox.uiButton[k] = CreateIconAndTextButton( gMsgBox.iButtonImages, gzUserDefinedButton[k], FONT12ARIAL, - ubFontColor, ubFontShadowColor, - ubFontColor, ubFontShadowColor, - TEXT_CJUSTIFIED, - (INT16)(gMsgBox.sX + sButtonX ), (INT16)(gMsgBox.sY + sButtonY ), BUTTON_TOGGLE ,MSYS_PRIORITY_HIGHEST, - DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)NumberedMsgBoxCallback ); - MSYS_SetBtnUserData( gMsgBox.uiButton[k], 0, k+1); - SetButtonCursor(gMsgBox.uiButton[k], usCursor); - ForceButtonUnDirty( gMsgBox.uiButton[k] ); + // begin from the front + sButtonX = sBlankSpace / 2; - //sButtonX += 75 + MSGBOX_SMALL_BUTTON_WIDTH + MSGBOX_SMALL_BUTTON_X_SEP; - sButtonX += MSGBOX_SMALL_BUTTON_WIDTH + MSGBOX_SMALL_BUTTON_X_SEP; + for ( INT8 j = 0; j < 4; ++j) + { + INT8 k = 4*i + j; + + gMsgBox.uiButton[k] = CreateIconAndTextButton( gMsgBox.iButtonImages, gzUserDefinedButton[k], FONT12ARIAL, + ubFontColor, ubFontShadowColor, + ubFontColor, ubFontShadowColor, + TEXT_CJUSTIFIED, + (INT16)(gMsgBox.sX + sButtonX ), (INT16)(gMsgBox.sY + sButtonY ), BUTTON_TOGGLE ,MSYS_PRIORITY_HIGHEST, + DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)NumberedMsgBoxCallback ); + MSYS_SetBtnUserData( gMsgBox.uiButton[k], 0, k+1); + SetButtonCursor(gMsgBox.uiButton[k], usCursor); + ForceButtonUnDirty( gMsgBox.uiButton[k] ); + + //sButtonX += 75 + MSGBOX_SMALL_BUTTON_WIDTH + MSGBOX_SMALL_BUTTON_X_SEP; + sButtonX += MSGBOX_SMALL_BUTTON_WIDTH + MSGBOX_SMALL_BUTTON_X_SEP; + } } } } - } // Create sixteen numbered buttons else if ( usFlags & MSG_BOX_FLAG_GENERIC_SIXTEEN_BUTTONS ) { @@ -554,10 +556,10 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN } else { - sBlankSpace = usTextBoxWidth - MSGBOX_SMALL_BUTTON_WIDTH * 4 - MSGBOX_SMALL_BUTTON_X_SEP * 3; - sButtonX = sBlankSpace / 2; - sButtonY = usTextBoxHeight - MSGBOX_BUTTON_HEIGHT - 10 - heightincrease - 6; - sButtonY -= MSGBOX_SMALL_BUTTON_WIDTH - MSGBOX_SMALL_BUTTON_X_SEP; + sBlankSpace = usTextBoxWidth - MSGBOX_SMALL_BUTTON_WIDTH * 4 - MSGBOX_SMALL_BUTTON_X_SEP * 3; + sButtonX = sBlankSpace / 2; + sButtonY = usTextBoxHeight - MSGBOX_BUTTON_HEIGHT - 10 - heightincrease - 6; + sButtonY -= MSGBOX_SMALL_BUTTON_WIDTH - MSGBOX_SMALL_BUTTON_X_SEP; } for ( INT8 i = 0; i < 4; ++i) @@ -572,9 +574,9 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN else { // new row - sButtonY += MSGBOX_SMALL_BUTTON_WIDTH - 2;// + MSGBOX_SMALL_BUTTON_X_SEP; - // begin from the front - sButtonX = sBlankSpace / 2 - MSGBOX_SMALL_BUTTON_WIDTH - MSGBOX_SMALL_BUTTON_X_SEP; + sButtonY += MSGBOX_SMALL_BUTTON_WIDTH - 2;// + MSGBOX_SMALL_BUTTON_X_SEP; + // begin from the front + sButtonX = sBlankSpace / 2 - MSGBOX_SMALL_BUTTON_WIDTH - MSGBOX_SMALL_BUTTON_X_SEP; } for ( INT8 j = 0; j < 4; ++j) @@ -645,12 +647,10 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN } else { - // Create text button if ( usFlags & MSG_BOX_FLAG_OK ) { - // sButtonX = ( usTextBoxWidth - MSGBOX_BUTTON_WIDTH ) / 2; sButtonX = ( usTextBoxWidth - GetMSgBoxButtonWidth( gMsgBox.iButtonImages ) ) / 2; @@ -665,9 +665,7 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN SetButtonCursor(gMsgBox.uiOKButton, usCursor); ForceButtonUnDirty( gMsgBox.uiOKButton ); } - - - + // Create text button if ( usFlags & MSG_BOX_FLAG_CANCEL ) { @@ -734,7 +732,6 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)NOMsgBoxCallback ); SetButtonCursor(gMsgBox.uiNOButton, usCursor); ForceButtonUnDirty( gMsgBox.uiNOButton ); - } if ( usFlags & MSG_BOX_FLAG_OKCONTRACT ) @@ -760,7 +757,6 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)ContractMsgBoxCallback ); SetButtonCursor(gMsgBox.uiNOButton, usCursor); ForceButtonUnDirty( gMsgBox.uiNOButton ); - } if ( usFlags & MSG_BOX_FLAG_YESNOCONTRACT ) @@ -795,10 +791,8 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)ContractMsgBoxCallback ); SetButtonCursor(gMsgBox.uiOKButton, usCursor); ForceButtonUnDirty( gMsgBox.uiOKButton ); - } - if ( usFlags & MSG_BOX_FLAG_GENERICCONTRACT ) { sButtonX = ( usTextBoxWidth - ( MSGBOX_BUTTON_WIDTH + MSGBOX_BUTTON_WIDTH + MSGBOX_BUTTON_X_SEP ) ) / 3; @@ -831,7 +825,6 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)ContractMsgBoxCallback ); SetButtonCursor(gMsgBox.uiOKButton, usCursor); ForceButtonUnDirty( gMsgBox.uiOKButton ); - } if ( usFlags & MSG_BOX_FLAG_GENERIC_TWO_BUTTONS ) @@ -891,7 +884,6 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)LieMsgBoxCallback ); SetButtonCursor(gMsgBox.uiOKButton, usCursor); ForceButtonUnDirty( gMsgBox.uiOKButton ); - } if ( usFlags & MSG_BOX_FLAG_OKSKIP ) @@ -918,7 +910,11 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN SetButtonCursor(gMsgBox.uiNOButton, usCursor); ForceButtonUnDirty( gMsgBox.uiNOButton ); } + } + if ( gMsgBox.usFlags & MSG_BOX_FLAG_DROPDOWN ) + { + DropDownTemplate::getInstance( ).Create( (INT16)(gMsgBox.sX + 15), (INT16)(gMsgBox.sY + 30) ); } #if 0 @@ -944,6 +940,12 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN return( iId ); } +// this has to be defined. As the MessageBoxScreenHandle() runs all time, there is nothing to do here though +template<> void DropDownTemplate::SetRefresh( ) +{ + // for now, nothing needed, update happens automatically +} + void MsgBoxClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) { @@ -1186,7 +1188,11 @@ UINT32 ExitMsgBox( INT8 ubExitCode ) RemoveButton( gMsgBox.uiYESButton ); RemoveButton( gMsgBox.uiNOButton ); } + } + if ( gMsgBox.usFlags & MSG_BOX_FLAG_DROPDOWN ) + { + DropDownTemplate::getInstance( ).Destroy( ); } // Delete button images @@ -1206,7 +1212,6 @@ UINT32 ExitMsgBox( INT8 ubExitCode ) // Restore mouse restriction region... RestrictMouseCursor( &gOldCursorLimitRectangle ); - gfInMsgBox = FALSE; // Call done callback! @@ -1214,8 +1219,7 @@ UINT32 ExitMsgBox( INT8 ubExitCode ) { (*(gMsgBox.ExitCallback))( ubExitCode ); } - - + //if ur in a non gamescreen and DONT want the msg box to use the save buffer, unset gfDontOverRideSaveBuffer in ur callback if( ( ( gMsgBox.uiExitScreen != GAME_SCREEN ) || ( fRestoreBackgroundForMessageBox == TRUE ) ) && gfDontOverRideSaveBuffer ) { @@ -1256,15 +1260,14 @@ UINT32 ExitMsgBox( INT8 ubExitCode ) // Remove save buffer! DeleteVideoSurfaceFromIndex( gMsgBox.uiSaveBuffer ); - - + switch( gMsgBox.uiExitScreen ) { case GAME_SCREEN: if ( InOverheadMap( ) ) { - gfOverheadMapDirty = TRUE; + gfOverheadMapDirty = TRUE; } else { @@ -1278,8 +1281,8 @@ UINT32 ExitMsgBox( INT8 ubExitCode ) if ( gfFadeInitialized ) { - SetPendingNewScreen(FADE_SCREEN); - return( FADE_SCREEN ); + SetPendingNewScreen(FADE_SCREEN); + return( FADE_SCREEN ); } return( gMsgBox.uiExitScreen ); @@ -1593,6 +1596,11 @@ UINT32 MessageBoxScreenHandle( ) } } + if ( gMsgBox.usFlags & MSG_BOX_FLAG_DROPDOWN ) + { + DropDownTemplate::getInstance( ).Display( ); + } + if ( gMsgBox.bHandled ) { SetRenderFlags( RENDER_FLAG_FULL ); diff --git a/MessageBoxScreen.h b/MessageBoxScreen.h index f857522f..59b6ab07 100644 --- a/MessageBoxScreen.h +++ b/MessageBoxScreen.h @@ -4,24 +4,26 @@ #include "mousesystem.h" // Message box flags -#define MSG_BOX_FLAG_USE_CENTERING_RECT 0x0001 // Pass in a rect to center in -#define MSG_BOX_FLAG_OK 0x0002 // Displays OK button -#define MSG_BOX_FLAG_YESNO 0x0004 // Displays YES NO buttons -#define MSG_BOX_FLAG_CANCEL 0x0008 // Displays YES NO buttons -#define MSG_BOX_FLAG_FOUR_NUMBERED_BUTTONS 0x0010 // Displays four numbered buttons, 1-4 -#define MSG_BOX_FLAG_YESNOCONTRACT 0x0020 // yes no and contract buttons -#define MSG_BOX_FLAG_OKCONTRACT 0x0040 // ok and contract buttons -#define MSG_BOX_FLAG_YESNOLIE 0x0080 // ok and contract buttons -#define MSG_BOX_FLAG_CONTINUESTOP 0x0100 // continue stop box -#define MSG_BOX_FLAG_OKSKIP 0x0200 // Displays ok or skip (meanwhile) buttons -#define MSG_BOX_FLAG_GENERICCONTRACT 0x0400 // displays contract buttoin + 2 user-defined text buttons -#define MSG_BOX_FLAG_GENERIC_TWO_BUTTONS 0x0800 // 2 user-defined text buttons +#define MSG_BOX_FLAG_USE_CENTERING_RECT 0x00000001 // Pass in a rect to center in +#define MSG_BOX_FLAG_OK 0x00000002 // Displays OK button +#define MSG_BOX_FLAG_YESNO 0x00000004 // Displays YES NO buttons +#define MSG_BOX_FLAG_CANCEL 0x00000008 // Displays YES NO buttons +#define MSG_BOX_FLAG_FOUR_NUMBERED_BUTTONS 0x00000010 // Displays four numbered buttons, 1-4 +#define MSG_BOX_FLAG_YESNOCONTRACT 0x00000020 // yes no and contract buttons +#define MSG_BOX_FLAG_OKCONTRACT 0x00000040 // ok and contract buttons +#define MSG_BOX_FLAG_YESNOLIE 0x00000080 // ok and contract buttons +#define MSG_BOX_FLAG_CONTINUESTOP 0x00000100 // continue stop box +#define MSG_BOX_FLAG_OKSKIP 0x00000200 // Displays ok or skip (meanwhile) buttons +#define MSG_BOX_FLAG_GENERICCONTRACT 0x00000400 // displays contract buttoin + 2 user-defined text buttons +#define MSG_BOX_FLAG_GENERIC_TWO_BUTTONS 0x00000800 // 2 user-defined text buttons // OJW - Adding text chatbox -#define MSG_BOX_FLAG_INPUTBOX 0x1000 // has a text input field +#define MSG_BOX_FLAG_INPUTBOX 0x00001000 // has a text input field // Flugente - added boxes with multiple buttons that can be renamed easily -#define MSG_BOX_FLAG_GENERIC_FOUR_BUTTONS 0x2000 // Displays four numbered buttons with definable labels -#define MSG_BOX_FLAG_GENERIC_EIGHT_BUTTONS 0x4000 // Displays eight numbered buttons with definable labels -#define MSG_BOX_FLAG_GENERIC_SIXTEEN_BUTTONS 0x8000 // Displays sixteen numbered buttons with definable labels +#define MSG_BOX_FLAG_GENERIC_FOUR_BUTTONS 0x00002000 // Displays four numbered buttons with definable labels +#define MSG_BOX_FLAG_GENERIC_EIGHT_BUTTONS 0x00004000 // Displays eight numbered buttons with definable labels +#define MSG_BOX_FLAG_GENERIC_SIXTEEN_BUTTONS 0x00008000 // Displays sixteen numbered buttons with definable labels + +#define MSG_BOX_FLAG_DROPDOWN 0x00010000 // Displays an aditional dropdown box // message box return codes #define MSG_BOX_RETURN_OK 1 // ENTER or on OK button @@ -76,7 +78,7 @@ extern UINT16 gzUserDefinedButtonColor[ NUM_CUSTOM_BUTTONS ]; typedef struct { - UINT16 usFlags; + UINT32 usFlags; UINT32 uiExitScreen; MSGBOX_CALLBACK ExitCallback; INT16 sX; @@ -127,7 +129,7 @@ extern CHAR16 gszMsgBoxInputString[255]; // pCenteringRect Rect to send if MSG_BOX_FLAG_USE_CENTERING_RECT set. Can be NULL //////////////////////////////// -INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback, SGPRect *pCenteringRect, UINT8 ubDefaultButton = MSG_BOX_DEFAULT_BUTTON_NONE ); +INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UINT32 usFlags, MSGBOX_CALLBACK ReturnCallback, SGPRect *pCenteringRect, UINT8 ubDefaultButton = MSG_BOX_DEFAULT_BUTTON_NONE ); void DoScreenIndependantMessageBox( const STR16 zString, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback ); void DoUpperScreenIndependantMessageBox( const STR16 zString, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback );