| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- //
- // Copyright 2020 Electronic Arts Inc.
- //
- // TiberianDawn.DLL and RedAlert.dll and corresponding source code 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.
- // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
- // in the hope that it will be useful, but with permitted additional restrictions
- // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
- // distributed with this program. You should have received a copy of the
- // GNU General Public License along with permitted additional restrictions
- // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
- #ifdef WOLAPI_INTEGRATION
- /***************************************************************************
- * WOLEditClass -- Derived from EditClass, includes changes I wanted for
- * wolapi integration stuff.
- * Note: An editbox of this class cannot be made read-only. See comment below.
- * HISTORY: 07/17/1998 ajw : Created.
- *=========================================================================*/
- #include "WOLEdit.h"
- //#include "WolDebug.h"
- bool bTabKeyPressedHack = false;
- //***********************************************************************************************
- void WOLEditClass::Draw_Text( char const * text )
- {
- // Only difference between this and EditClass: cursor shows up when
- // string is at MaxLength.
- TextPrintType flags;
- if (Has_Focus()) {
- flags = TPF_BRIGHT_COLOR;
- } else {
- flags = (TextPrintType)0;
- }
- Conquer_Clip_Text_Print(text, X+1, Y+1, Color, TBLACK, TextFlags | flags, Width-2);
- if (Has_Focus() && // strlen(text) < MaxLength &&
- (String_Pixel_Width(text) + String_Pixel_Width ("_") < Width-2) ) {
- Conquer_Clip_Text_Print( "_", X+1+String_Pixel_Width(text), Y+1, Color, TBLACK, TextFlags | flags);
- }
- }
- //***********************************************************************************************
- // Override of EditClass::Action, because the base class does not behave correctly in certain circumstances.
- // (Escape key is being processed as enter key.)
- // Again, I'm not about to change the base class directly, as I'm trying to have as minimal an affect as possible on
- // the current game code. -ajw
- int WOLEditClass::Action(unsigned flags, KeyNumType & key)
- {
- // (Mostly duplicated from base class ::Action)
- /* For some painful reason, IsReadOnly is private in the base class, so I can't do the following.
- For this reason, don't make a WOLEditClass edit box read-only.
- //
- // If this is a read-only edit box, it's a display-only device
- //
- if (IsReadOnly) {
- return(false);
- }
- */
- //debugprint( "WOLEditClass::Action this=%i, flags=0x%x, key=0x%x\n", this, flags, key );
- //
- // If the left mouse button is pressed over this gadget, then set the focus to
- // this gadget. The event flag is cleared so that no button ID number is returned.
- //
- if ((flags & LEFTPRESS)) {
- flags &= ~LEFTPRESS;
- Set_Focus();
- Flag_To_Redraw(); // force to draw cursor
- }
- //
- // Handle keyboard events here. Normally, the key is added to the string, but if the
- // RETURN key is pressed, then the button ID number is returned from the Input()
- // function.
- //
- if ((flags & KEYBOARD) && Has_Focus()) {
- //
- // Process the keyboard character. If indicated, consume this keyboard event
- // so that the edit gadget ID number is not returned.
- //
- if (key == KN_ESC) {
- Clear_Focus();
- flags = 0;
- } else {
- #ifdef WIN32
- KeyASCIIType ascii = (KeyASCIIType)(Keyboard->To_ASCII(key) & 0xff);
- //
- // Allow numeric keypad presses to map to ascii numbers
- //
- if ((key & WWKEY_VK_BIT) && ascii >='0' && ascii <= '9') {
- key = (KeyNumType)(key & ~WWKEY_VK_BIT);
- if ( (!(flags & LEFTRELEASE)) && (!(flags & RIGHTRELEASE))) {
- if (Handle_Key (ascii) ) {
- flags &= ~KEYBOARD;
- key = KN_NONE;
- }
- }
- } else {
- //
- // Filter out all special keys except return and backspace
- //
- if ((!(key & WWKEY_VK_BIT) && ascii >= ' ' && ascii <= 255)
- || key == KN_RETURN || key == KN_BACKSPACE) {
- if ((!(flags & LEFTRELEASE)) && (!(flags & RIGHTRELEASE))) {
- if (Handle_Key(Keyboard->To_ASCII(key))) {
- flags &= ~KEYBOARD;
- key = KN_NONE;
- }
- }
- } else {
- if( key == KN_TAB )
- {
- bTabKeyPressedHack = true;
- }
- flags &= ~KEYBOARD;
- key = KN_NONE;
- }
- }
- }
- #else //WIN32
- if (Handle_Key(Keyboard->To_ASCII(key))) {
- flags &= ~KEYBOARD;
- key = KN_NONE;
- }
- }
- #endif //WIN32
- }
- else
- {
- // ajw added
- // if( key == ( KN_ESC | WWKEY_RLS_BIT ) && ( key & WWKEY_ALT_BIT ) )
- // {
- //Clear_Focus();
- flags = 0;
- key = KN_NONE;
- // }
- }
- return(ControlClass::Action(flags, key));
- }
- #endif
|