mirror of
https://github.com/reactos/reactos.git
synced 2025-05-31 23:18:39 +00:00
[USETUP] Implement the shutdown timeout progress bar. (#833)
- Add the MUI ID resource. - Implement the shutdown timeout progress bar function and the TimeOut string handler. - Add the resource string to other resource languages.
This commit is contained in:
parent
02da7b452c
commit
e5c0bfacf1
27 changed files with 246 additions and 20 deletions
|
@ -1792,6 +1792,8 @@ MUI_STRING bgBGStrings[] =
|
|||
" ƒ®â®¢®..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = <20>१ ¯ã᪠¥ ª®¬¯îâêà "},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Žâ¢ àï¥â® ª®§®« â ¥ ¥¢ê§¬®¦®\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1777,6 +1777,8 @@ MUI_STRING bnBDStrings[] =
|
|||
" Done..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Reboot computer"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Unable to open the console\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1785,6 +1785,8 @@ MUI_STRING csCZStrings[] =
|
|||
" Hotovo..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Restartovat poŸ¡taŸ"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Nelze otevý¡t konzoli\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1791,6 +1791,8 @@ MUI_STRING daDKStrings[] =
|
|||
" Udf›rt..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Genstart"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Kunne ikke †bne konsollen\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1781,6 +1781,8 @@ MUI_STRING deDEStrings[] =
|
|||
" Fertig..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" EINGABETASTE = Computer neu starten"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Konsole konnte nicht ge”ffnet werden\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1796,6 +1796,8 @@ MUI_STRING elGRStrings[] =
|
|||
" Ž¢¦¡¢ž¨éŸž¡œ..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = „§œ¤ ¡¡å¤ž©ž ¬§¦¢¦š ©«ã"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"€›ç¤˜«¦ ¤˜ ˜¤¦ ®«œå ž ¡¦¤©æ¢˜\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1777,6 +1777,8 @@ MUI_STRING enUSStrings[] =
|
|||
" Done..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Reboot computer"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Unable to open the console\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1781,6 +1781,8 @@ MUI_STRING esESStrings[] =
|
|||
" Terminado..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" INTRO = Reiniciar el equipo"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"No se pudo abrir la consola\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1777,6 +1777,8 @@ MUI_STRING etEEStrings[] =
|
|||
" Valmis..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Taask„ivita arvuti"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Konsooli ei ännestunud avada\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1796,6 +1796,8 @@ MUI_STRING frFRStrings[] =
|
|||
" Termin‚..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTR<54>E = Red‚marrer l'ordinateur"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Impossible d'ouvrir la console\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1779,6 +1779,8 @@ MUI_STRING heILStrings[] =
|
|||
" ‘‰…<E280B0>..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = „”’Œ އƒ™ €š „Ž™<C5BD>"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Unable to open the console\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1784,6 +1784,8 @@ MUI_STRING itITStrings[] =
|
|||
" Fatto..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" INVIO = Riavvia il computer"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Impossibile aprire la console\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1781,6 +1781,8 @@ MUI_STRING jaJPStrings[] =
|
|||
" ¶ÝØ®³..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = ºÝËß°ÀÉ »²·ÄÞ³"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"ºÝ¿°Ù¦ µ°ÌßÝ Ã޷ϾÝ\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1787,6 +1787,8 @@ MUI_STRING ltLTStrings[] =
|
|||
" Done..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Reboot computer"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Unable to open the console\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1666,6 +1666,8 @@ MUI_STRING msMYStrings[] =
|
|||
" Siap..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Memulakan semuala komputer"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Tidak dapat membuka konsol\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1807,6 +1807,8 @@ MUI_STRING nlNLStrings[] =
|
|||
" Voltooid..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Computer opnieuw opstarten"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Kan console niet openen.\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1788,6 +1788,8 @@ MUI_STRING plPLStrings[] =
|
|||
" Ukoäczone..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Restart komputera"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Otwarcie konsoli nieudane\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1811,6 +1811,8 @@ MUI_STRING ptBRStrings[] =
|
|||
" Pronto..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER=Reiniciar"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"NÆo foi poss¡vel abrir o console\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1831,6 +1831,8 @@ MUI_STRING roROStrings[] =
|
|||
" Terminat!"},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Repornire calculator"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Eºec la deschiderea consolei\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1778,6 +1778,8 @@ MUI_STRING ruRUStrings[] =
|
|||
" ‡ ¢¥à襮..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = <20>¥à¥§ £à㧪 "},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"<EFBFBD>¥ 㤠«®áì ®âªàëâì ª®á®«ì\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1791,6 +1791,8 @@ MUI_STRING skSKStrings[] =
|
|||
" Hotovo..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Reçtart poŸ¡taŸa"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Nemo§no otvoriœ konzolu\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1784,6 +1784,8 @@ MUI_STRING sqALStrings[] =
|
|||
" Mbaruam..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Ristarto kompjuterin"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"N‰ pamundesi p‰r t‰ hapur konsollin\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1787,6 +1787,8 @@ MUI_STRING svSEStrings[] =
|
|||
" F„rdigt..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = Starta om datorn"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Det g†r inte ”ppna Konsollen\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1758,6 +1758,8 @@ MUI_STRING trTRStrings[] =
|
|||
" Bitti..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" GiriŸ = Bilgisayar<61> Yeniden BaŸlat"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"Konsol a‡<61>lam<61>yor.\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -1787,6 +1787,8 @@ MUI_STRING ukUAStrings[] =
|
|||
" ƒ®â®¢®..."},
|
||||
{STRING_REBOOTCOMPUTER2,
|
||||
" ENTER = <20>¥à¥§ ¢ â ¦¨â¨ ª®¬¯'îâ¥à"},
|
||||
{STRING_REBOOTPROGRESSBAR,
|
||||
" Your computer will reboot in %li second(s)... "},
|
||||
{STRING_CONSOLEFAIL1,
|
||||
"<EFBFBD>¥ ¢¤ «®áì ¢i¤ªà¨â¨ ª®á®«ì\r\n\r\n"},
|
||||
{STRING_CONSOLEFAIL2,
|
||||
|
|
|
@ -159,3 +159,4 @@ MUIGetString(
|
|||
#define STRING_MB 54
|
||||
#define STRING_GB 55
|
||||
#define STRING_ADDKBLAYOUTS 56
|
||||
#define STRING_REBOOTPROGRESSBAR 64
|
||||
|
|
|
@ -4502,6 +4502,195 @@ BootLoaderHarddiskMbrPage(PINPUT_RECORD Ir)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* @name ProgressTimeOutStringHandler
|
||||
*
|
||||
* Handles the generation (displaying) of the timeout
|
||||
* countdown to the screen dynamically.
|
||||
*
|
||||
* @param Bar
|
||||
* A pointer to a progress bar.
|
||||
*
|
||||
* @param AlwaysUpdate
|
||||
* Constantly update the progress bar (boolean type).
|
||||
*
|
||||
* @param Buffer
|
||||
* A pointer to a string buffer.
|
||||
*
|
||||
* @param cchBufferSize
|
||||
* The buffer's size in number of characters.
|
||||
*
|
||||
* @return
|
||||
* TRUE or FALSE on function termination.
|
||||
*
|
||||
*/
|
||||
static
|
||||
BOOLEAN NTAPI
|
||||
ProgressTimeOutStringHandler(
|
||||
IN PPROGRESSBAR Bar,
|
||||
IN BOOLEAN AlwaysUpdate,
|
||||
OUT PSTR Buffer,
|
||||
IN SIZE_T cchBufferSize)
|
||||
{
|
||||
ULONG OldProgress = Bar->Progress;
|
||||
|
||||
if (Bar->StepCount == 0)
|
||||
{
|
||||
Bar->Progress = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Bar->Progress = Bar->StepCount - Bar->CurrentStep;
|
||||
}
|
||||
|
||||
/* Build the progress string if it has changed */
|
||||
if (Bar->ProgressFormatText &&
|
||||
(AlwaysUpdate || (Bar->Progress != OldProgress)))
|
||||
{
|
||||
RtlStringCchPrintfA(Buffer, cchBufferSize,
|
||||
Bar->ProgressFormatText, Bar->Progress);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @name ProgressCountdown
|
||||
*
|
||||
* Displays and draws a red-coloured progress bar with a countdown.
|
||||
* When the timeout is reached, the flush page is displayed for reboot.
|
||||
*
|
||||
* @param Ir
|
||||
* A pointer to an input keyboard record.
|
||||
*
|
||||
* @param TimeOut
|
||||
* Initial countdown value in seconds.
|
||||
*
|
||||
* @return
|
||||
* Nothing.
|
||||
*
|
||||
*/
|
||||
static VOID
|
||||
ProgressCountdown(
|
||||
IN PINPUT_RECORD Ir,
|
||||
IN LONG TimeOut)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
ULONG StartTime;
|
||||
LONG TimeElapsed;
|
||||
LONG TimerValue = TimeOut, OldTimerValue;
|
||||
LARGE_INTEGER Timeout;
|
||||
PPROGRESSBAR ProgressBar;
|
||||
BOOLEAN RefreshProgress = TRUE;
|
||||
|
||||
/* Bail out if the timeout is already zero */
|
||||
if (TimeOut <= 0)
|
||||
return;
|
||||
|
||||
/* Create the timeout progress bar and set it up */
|
||||
ProgressBar = CreateProgressBarEx(13,
|
||||
26,
|
||||
xScreen - 13,
|
||||
yScreen - 20,
|
||||
10,
|
||||
24,
|
||||
TRUE,
|
||||
FOREGROUND_RED | BACKGROUND_BLUE,
|
||||
TimerValue,
|
||||
NULL,
|
||||
MUIGetString(STRING_REBOOTPROGRESSBAR),
|
||||
ProgressTimeOutStringHandler);
|
||||
|
||||
StartTime = NtGetTickCount();
|
||||
CONSOLE_Flush();
|
||||
|
||||
OldTimerValue = TimerValue;
|
||||
while (TRUE)
|
||||
{
|
||||
/* Decrease the timer */
|
||||
|
||||
/*
|
||||
* Compute how much time the previous operations took.
|
||||
* This allows us in particular to take account for any time
|
||||
* elapsed if something slowed down.
|
||||
*/
|
||||
TimeElapsed = NtGetTickCount() - StartTime;
|
||||
if (TimeElapsed >= 1000)
|
||||
{
|
||||
/* Increase StartTime by steps of 1 second */
|
||||
TimeElapsed /= 1000;
|
||||
StartTime += (1000 * TimeElapsed);
|
||||
|
||||
if (TimeElapsed <= TimerValue)
|
||||
TimerValue -= TimeElapsed;
|
||||
else
|
||||
TimerValue = 0;
|
||||
|
||||
RefreshProgress = TRUE;
|
||||
}
|
||||
|
||||
if (RefreshProgress)
|
||||
{
|
||||
ProgressSetStep(ProgressBar, OldTimerValue - TimerValue);
|
||||
RefreshProgress = FALSE;
|
||||
}
|
||||
|
||||
/* Stop when the timer reaches zero */
|
||||
if (TimerValue <= 0)
|
||||
break;
|
||||
|
||||
/* Check for user key presses */
|
||||
|
||||
/*
|
||||
* If the timer is used, use a passive wait of maximum 1 second
|
||||
* while monitoring for incoming console input events, so that
|
||||
* we are still able to display the timing count.
|
||||
*/
|
||||
|
||||
/* Wait a maximum of 1 second for input events */
|
||||
TimeElapsed = NtGetTickCount() - StartTime;
|
||||
if (TimeElapsed < 1000)
|
||||
{
|
||||
/* Convert the time to NT Format */
|
||||
Timeout.QuadPart = (1000 - TimeElapsed) * -10000LL;
|
||||
Status = NtWaitForSingleObject(StdInput, FALSE, &Timeout);
|
||||
}
|
||||
else
|
||||
{
|
||||
Status = STATUS_TIMEOUT;
|
||||
}
|
||||
|
||||
/* Check whether the input event has been signaled, or a timeout happened */
|
||||
if (Status == STATUS_TIMEOUT)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (Status != STATUS_WAIT_0)
|
||||
{
|
||||
/* An error happened, bail out */
|
||||
DPRINT1("NtWaitForSingleObject() failed, Status 0x%08lx\n", Status);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check for an ENTER key press */
|
||||
while (CONSOLE_ConInKeyPeek(Ir))
|
||||
{
|
||||
if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
|
||||
{
|
||||
/* Found it, stop waiting */
|
||||
goto Exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Exit:
|
||||
/* Destroy the progress bar and quit */
|
||||
DestroyProgressBar(ProgressBar);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Displays the QuitPage.
|
||||
*
|
||||
|
@ -4572,15 +4761,9 @@ QuitPage(PINPUT_RECORD Ir)
|
|||
|
||||
CONSOLE_SetStatusText(MUIGetString(STRING_REBOOTCOMPUTER2));
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
CONSOLE_ConInKey(Ir);
|
||||
|
||||
if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
|
||||
{
|
||||
return FLUSH_PAGE;
|
||||
}
|
||||
}
|
||||
/* Wait for maximum 15 seconds or an ENTER key before quitting */
|
||||
ProgressCountdown(Ir, 15);
|
||||
return FLUSH_PAGE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -4602,19 +4785,11 @@ SuccessPage(PINPUT_RECORD Ir)
|
|||
MUIDisplayPage(SUCCESS_PAGE);
|
||||
|
||||
if (IsUnattendedSetup)
|
||||
{
|
||||
return FLUSH_PAGE;
|
||||
}
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
CONSOLE_ConInKey(Ir);
|
||||
|
||||
if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
|
||||
{
|
||||
return FLUSH_PAGE;
|
||||
}
|
||||
}
|
||||
/* Wait for maximum 15 seconds or an ENTER key before quitting */
|
||||
ProgressCountdown(Ir, 15);
|
||||
return FLUSH_PAGE;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue