void SetTopFileToLetter( UINT16 usLetter ) { UINT32 x; FDLG_LIST *curr; FDLG_LIST *prev; UINT16 usNodeLetter; // Skip to first filename x = 0; curr = prev = FileList; while( curr ) { usNodeLetter = curr->FileInfo.zFileName[0]; //first letter of filename. if( usNodeLetter < 'a' ) usNodeLetter += 32; //convert uppercase to lower case A=65, a=97 if( usLetter <= usNodeLetter ) break; prev = curr; curr = curr->pNext; x++; } if( FileList ) { iCurrFileShown = x; iTopFileShown = x; if( iTopFileShown > iTotalFiles - 7 ) iTopFileShown = iTotalFiles - 7; SetInputFieldStringWith8BitString( 0, prev->FileInfo.zFileName ); } }
//This is a hook into the text input code. This callback is called whenever the user is currently //editing text, and presses Tab to transfer to the file dialog mode. When this happens, we set the text //field to the currently selected file in the list which is already know. void FileDialogModeCallback( UINT8 ubID, BOOLEAN fEntering ) { INT32 x; FDLG_LIST *FListNode; if( fEntering ) { // Skip to first filename FListNode = FileList; for(x=0;x<iTopFileShown && x<iTotalFiles && FListNode != NULL;x++) { FListNode = FListNode->pNext; } // Find the already selected filename for(x = iTopFileShown; x < iTopFileShown + 8 && x < iTotalFiles && FListNode != NULL; x++ ) { if( iCurrFileShown == (x-iTopFileShown) ) { FListNode->FileInfo.zFileName[30] = 0; SetInputFieldStringWith8BitString( 0, FListNode->FileInfo.zFileName ); return; } FListNode = FListNode->pNext; } } }
void ProcessEditorRendering() { BOOLEAN fSaveBuffer = FALSE; if( gfRenderTaskbar ) //do a full taskbar render. { if(iCurrentTaskbar == TASK_OPTIONS && !gfSummaryWindowActive)//dnl ch52 091009 { CHAR8 szNewText[4+1]; sprintf(szNewText, "%d", iNewMapWorldRows=WORLD_ROWS); SetInputFieldStringWith8BitString(1, szNewText); sprintf(szNewText, "%d", iNewMapWorldCols=WORLD_COLS); SetInputFieldStringWith8BitString(2, szNewText); DisableTextField(2); } ClearTaskbarRegion( 0, SCREEN_HEIGHT - 120, SCREEN_WIDTH, SCREEN_HEIGHT ); RenderTerrainTileButtons(); MarkButtonsDirty(); gfRenderTaskbar = FALSE; fSaveBuffer = TRUE; gfRenderDrawingMode = TRUE; gfRenderHilights = FALSE; gfRenderMercInfo = TRUE; } if( gfRenderDrawingMode ) { if( iCurrentTaskbar == TASK_BUILDINGS || iCurrentTaskbar == TASK_TERRAIN || iCurrentTaskbar == TASK_ITEMS ) { ShowCurrentDrawingMode(); gfRenderDrawingMode = FALSE; } } //render dynamically changed buttons only RenderButtons( ); if( gfSummaryWindowActive ) RenderSummaryWindow(); else if( !gfGotoGridNoUI && !gfKeyboardItemCreationUI && !InOverheadMap() && !gfEditingDoor )//dnl ch86 220214 RenderMercStrings(); if( gfEditingDoor ) RenderDoorEditingWindow(); if( TextInputMode() ) RenderAllTextFields(); RenderEditorInfo(); if( !gfSummaryWindowActive && !gfGotoGridNoUI && !gfKeyboardItemCreationUI && !InOverheadMap() && !gfEditingDoor )//dnl ch86 220214 { if( gpItem && gsItemGridNo != -1 ) RenderSelectedItemBlownUp(); if( iCurrentTaskbar == TASK_MAPINFO ) RenderMapEntryPointsAndLights(); if( iDrawMode == DRAW_MODE_PLACE_ITEM && eInfo.uiItemType == TBAR_MODE_ITEM_KEYS || iDrawMode == DRAW_MODE_DOORKEYS ) RenderDoorLockInfo(); } if( fSaveBuffer ) BlitBufferToBuffer( FRAME_BUFFER, guiSAVEBUFFER, 0, 2 * iScreenHeightOffset + 360, SCREEN_WIDTH, 120 ); //Make sure this is TRUE at all times. //It is set to false when before we save the buffer, so the buttons don't get //rendered with hilites, in case the mouse is over one. gfRenderHilights = TRUE; if(!gfSummaryWindowActive && !gfScrollInertia && !gfEditingDoor)//dnl ch77 131113 //dnl ch78 271113 //dnl ch86 210214 RenderButtonsFastHelp(); }
void HandleMainKeyEvents( InputAtom *pEvent ) { INT32 iPrevFileShown = iCurrFileShown; //Replace Alt-x press with ESC. if( pEvent->usKeyState & ALT_DOWN && pEvent->usParam == 'x' ) pEvent->usParam = ESC; switch( pEvent->usParam ) { case ENTER: if( gfNoFiles && iCurrentAction == ACTION_LOAD_MAP ) break; gfDestroyFDlg = TRUE; iFDlgState = iCurrentAction == ACTION_SAVE_MAP ? DIALOG_SAVE : DIALOG_LOAD; break; case ESC: gfDestroyFDlg = TRUE; iFDlgState = DIALOG_CANCEL; break; case PGUP: if( iTopFileShown > 7 ) { iTopFileShown -= 7; iCurrFileShown -= 7; } else { iTopFileShown = 0; iCurrFileShown = 0; } break; case PGDN: iTopFileShown += 7; iCurrFileShown += 7; if( iTopFileShown > iTotalFiles-7 ) iTopFileShown = iTotalFiles - 7; if( iCurrFileShown >= iTotalFiles ) iCurrFileShown = iTotalFiles - 1; break; case UPARROW: if( iCurrFileShown > 0 ) iCurrFileShown--; if( iTopFileShown > iCurrFileShown ) iTopFileShown = iCurrFileShown; break; case DNARROW: iCurrFileShown++; if( iCurrFileShown >= iTotalFiles ) iCurrFileShown = iTotalFiles - 1; else if( iTopFileShown < iCurrFileShown-7 ) iTopFileShown++; break; case HOME: case CTRL_HOME: iTopFileShown = 0; iCurrFileShown = 0; break; case END: case CTRL_END: iTopFileShown = iTotalFiles-7; iCurrFileShown = iTotalFiles-1; break; case DEL: iFDlgState = DIALOG_DELETE; break; default: //This case handles jumping the file list to display the file with the letter pressed. if( pEvent->usParam >= 'a' && pEvent->usParam <= 'z' || pEvent->usParam >= 'A' && pEvent->usParam <= 'Z' ) { if( pEvent->usParam >= 'A' && pEvent->usParam <= 'Z' ) //convert upper case to lower case pEvent->usParam += 32; // A = 65, a = 97 (difference of 32) SetTopFileToLetter( (UINT16)pEvent->usParam ); } break; } //Update the text field if the file value has changed. if( iCurrFileShown != iPrevFileShown ) { INT32 x; FDLG_LIST *curr; x = 0; curr = FileList; while( curr && x != iCurrFileShown ) { curr = curr->pNext; x++; } if( curr ) { SetInputFieldStringWith8BitString( 0, curr->FileInfo.zFileName ); swprintf( gzFilename, L"%S", curr->FileInfo.zFileName ); } } }