/* ** Command & Conquer Generals Zero Hour(tm) ** Copyright 2025 Electronic Arts Inc. ** ** 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 3 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, see . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// // FILE: GridSettings.cpp ///////////////////////////////////////////////////// //----------------------------------------------------------------------------- // // Westwood Studios Pacific. // // Confidential Information // Copyright (C) 2001 - All Rights Reserved // //----------------------------------------------------------------------------- // // Project: GUIEdit // // File name: GridSettings.cpp // // Created: Colin Day, July 2001 // // Desc: New layout dialog procedure // //----------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////// // SYSTEM INCLUDES //////////////////////////////////////////////////////////// #include // USER INCLUDES ////////////////////////////////////////////////////////////// #include "Lib/BaseType.h" #include "Resource.h" #include "EditWindow.h" #include "GUIEdit.h" // DEFINES //////////////////////////////////////////////////////////////////// // PRIVATE TYPES ////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // PRIVATE DATA /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// static RGBColorInt gridColor = { 0 }; // PUBLIC DATA //////////////////////////////////////////////////////////////// // PRIVATE PROTOTYPES ///////////////////////////////////////////////////////// // PRIVATE FUNCTIONS ////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // PUBLIC FUNCTIONS /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // initGridSettings =========================================================== /** Initialize the dialog values */ //============================================================================= static void initGridSettings( HWND hWndDialog ) { // set resolution SetDlgItemInt( hWndDialog, EDIT_RESOLUTION, TheEditor->getGridResolution(), FALSE ); // check box for on/off if( TheEditor->isGridVisible() == TRUE ) CheckDlgButton( hWndDialog, CHECK_VISIBLE, BST_CHECKED ); // check box for grid snap on/off if( TheEditor->isGridSnapOn() == TRUE ) CheckDlgButton( hWndDialog, CHECK_SNAP_TO_GRID, BST_CHECKED ); // style CheckDlgButton( hWndDialog, RADIO_LINES, BST_CHECKED ); // color RGBColorInt *color = TheEditor->getGridColor(); gridColor = *color; } // end initGridSettings // GridSettingsDialogProc ===================================================== /** Dialog procedure for grid settings dialog */ //============================================================================= BOOL CALLBACK GridSettingsDialogProc( HWND hWndDialog, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { // ------------------------------------------------------------------------ case WM_INITDIALOG: { // initialize the values for the the dialog initGridSettings( hWndDialog ); return TRUE; } // end init dialog // ------------------------------------------------------------------------ case WM_DRAWITEM: { UINT controlID = (UINT)wParam; // control identifier LPDRAWITEMSTRUCT drawItem = (LPDRAWITEMSTRUCT)lParam; // item drawing RGBColorInt *color = &gridColor; // we only care about color button controls if( color ) { HBRUSH hBrushNew, hBrushOld; RECT rect; HWND hWndControl = GetDlgItem( hWndDialog, controlID ); // if this control is disabled just let windows handle drawing if( IsWindowEnabled( hWndControl ) == FALSE ) return FALSE; // Get the area we have to draw in GetClientRect( hWndControl, &rect ); // create a new brush and select it into DC hBrushNew = CreateSolidBrush (RGB ((BYTE)color->red, (BYTE)color->green, (BYTE)color->blue)); hBrushOld = (HBRUSH)SelectObject( drawItem->hDC, hBrushNew ); // draw the rectangle Rectangle( drawItem->hDC, rect.left, rect.top, rect.right, rect.bottom ); // put the old brush back and delete the new one SelectObject( drawItem->hDC, hBrushOld ); DeleteObject( hBrushNew ); // validate this new area ValidateRect( hWndControl, NULL ); // we have taken care of it return TRUE; } // end if return FALSE; } // end draw item // ------------------------------------------------------------------------ case WM_COMMAND: { // Int notifyCode = HIWORD( wParam ); // notification code // Int controlID = LOWORD( wParam ); // control ID HWND hWndControl = (HWND)lParam; // control window handle switch( LOWORD( wParam ) ) { // -------------------------------------------------------------------- case BUTTON_COLOR: { RGBColorInt *currColor = &gridColor; // bring up color selector for this color control at the mouse if( currColor ) { RGBColorInt *newColor; POINT mouse; GetCursorPos( &mouse ); newColor = SelectColor( currColor->red, currColor->green, currColor->blue, currColor->alpha, mouse.x, mouse.y ); if( newColor ) { gridColor = *newColor; InvalidateRect( hWndControl, NULL, TRUE ); } // end if } // end if break; } // end color buttons // -------------------------------------------------------------------- case IDOK: { Int value; // get the pixels between marks value = GetDlgItemInt( hWndDialog, EDIT_RESOLUTION, NULL, FALSE ); TheEditor->setGridResolution( value ); // get grid on/off flag value = IsDlgButtonChecked( hWndDialog, CHECK_VISIBLE ); TheEditor->setGridVisible( value ); // get snap on/off flag value = IsDlgButtonChecked( hWndDialog, CHECK_SNAP_TO_GRID ); TheEditor->setGridSnap( value ); // grid color TheEditor->setGridColor( &gridColor ); // end this dialog EndDialog( hWndDialog, TRUE ); break; } // end ok // -------------------------------------------------------------------- case IDCANCEL: { EndDialog( hWndDialog, FALSE ); break; } // end cancel } // end switch( LOWORD( wParam ) ) return 0; } // end of WM_COMMAND // ------------------------------------------------------------------------ case WM_CLOSE: { EndDialog( hWndDialog, FALSE ); return 0; } // end close // ------------------------------------------------------------------------ default: return 0; } // end of switch } // end GridSettingsDialogProc