mirror of
https://github.com/reactos/reactos.git
synced 2025-05-08 11:24:14 +00:00
[FREELDR:UI] Code formatting only.
This commit is contained in:
parent
942e79963a
commit
844c9dce6c
8 changed files with 224 additions and 384 deletions
|
@ -19,35 +19,35 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
extern ULONG UiScreenWidth; // Screen Width
|
extern ULONG UiScreenWidth; // Screen Width
|
||||||
extern ULONG UiScreenHeight; // Screen Height
|
extern ULONG UiScreenHeight; // Screen Height
|
||||||
|
|
||||||
extern UCHAR UiStatusBarFgColor; // Status bar foreground color
|
extern UCHAR UiStatusBarFgColor; // Status bar foreground color
|
||||||
extern UCHAR UiStatusBarBgColor; // Status bar background color
|
extern UCHAR UiStatusBarBgColor; // Status bar background color
|
||||||
extern UCHAR UiBackdropFgColor; // Backdrop foreground color
|
extern UCHAR UiBackdropFgColor; // Backdrop foreground color
|
||||||
extern UCHAR UiBackdropBgColor; // Backdrop background color
|
extern UCHAR UiBackdropBgColor; // Backdrop background color
|
||||||
extern UCHAR UiBackdropFillStyle; // Backdrop fill style
|
extern UCHAR UiBackdropFillStyle; // Backdrop fill style
|
||||||
extern UCHAR UiTitleBoxFgColor; // Title box foreground color
|
extern UCHAR UiTitleBoxFgColor; // Title box foreground color
|
||||||
extern UCHAR UiTitleBoxBgColor; // Title box background color
|
extern UCHAR UiTitleBoxBgColor; // Title box background color
|
||||||
extern UCHAR UiMessageBoxFgColor; // Message box foreground color
|
extern UCHAR UiMessageBoxFgColor; // Message box foreground color
|
||||||
extern UCHAR UiMessageBoxBgColor; // Message box background color
|
extern UCHAR UiMessageBoxBgColor; // Message box background color
|
||||||
extern UCHAR UiMenuFgColor; // Menu foreground color
|
extern UCHAR UiMenuFgColor; // Menu foreground color
|
||||||
extern UCHAR UiMenuBgColor; // Menu background color
|
extern UCHAR UiMenuBgColor; // Menu background color
|
||||||
extern UCHAR UiTextColor; // Normal text color
|
extern UCHAR UiTextColor; // Normal text color
|
||||||
extern UCHAR UiSelectedTextColor; // Selected text color
|
extern UCHAR UiSelectedTextColor; // Selected text color
|
||||||
extern UCHAR UiSelectedTextBgColor; // Selected text background color
|
extern UCHAR UiSelectedTextBgColor; // Selected text background color
|
||||||
extern UCHAR UiEditBoxTextColor; // Edit box text color
|
extern UCHAR UiEditBoxTextColor; // Edit box text color
|
||||||
extern UCHAR UiEditBoxBgColor; // Edit box text background color
|
extern UCHAR UiEditBoxBgColor; // Edit box text background color
|
||||||
|
|
||||||
extern CHAR UiTitleBoxTitleText[260]; // Title box's title text
|
extern CHAR UiTitleBoxTitleText[260]; // Title box's title text
|
||||||
|
|
||||||
extern BOOLEAN UiUseSpecialEffects; // Tells us if we should use fade effects
|
extern BOOLEAN UiUseSpecialEffects; // Tells us if we should use fade effects
|
||||||
extern BOOLEAN UiCenterMenu;
|
extern BOOLEAN UiCenterMenu;
|
||||||
extern BOOLEAN UiMenuBox;
|
extern BOOLEAN UiMenuBox;
|
||||||
extern CHAR UiTimeText[];
|
extern CHAR UiTimeText[];
|
||||||
extern BOOLEAN UiDrawTime;
|
extern BOOLEAN UiDrawTime;
|
||||||
|
|
||||||
extern const CHAR UiMonthNames[12][15];
|
extern const CHAR UiMonthNames[12][15];
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -186,46 +186,46 @@ VOID UiInit(const char *CmdLine);
|
||||||
|
|
||||||
extern UIVTBL UiVtbl;
|
extern UIVTBL UiVtbl;
|
||||||
|
|
||||||
/*
|
|
||||||
* Combines the foreground and background colors into a single attribute byte
|
|
||||||
*/
|
|
||||||
#define ATTR(cFore, cBack) ((cBack << 4)|cFore)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fill styles for DrawBackdrop()
|
* Fill styles for DrawBackdrop()
|
||||||
*/
|
*/
|
||||||
#define LIGHT_FILL 0xB0
|
#define LIGHT_FILL 0xB0
|
||||||
#define MEDIUM_FILL 0xB1
|
#define MEDIUM_FILL 0xB1
|
||||||
#define DARK_FILL 0xB2
|
#define DARK_FILL 0xB2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Combines the foreground and background colors into a single attribute byte
|
||||||
|
*/
|
||||||
|
#define ATTR(cFore, cBack) ((cBack << 4) | cFore)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Screen colors
|
* Screen colors
|
||||||
*/
|
*/
|
||||||
#define COLOR_BLACK 0
|
#define COLOR_BLACK 0
|
||||||
#define COLOR_BLUE 1
|
#define COLOR_BLUE 1
|
||||||
#define COLOR_GREEN 2
|
#define COLOR_GREEN 2
|
||||||
#define COLOR_CYAN 3
|
#define COLOR_CYAN 3
|
||||||
#define COLOR_RED 4
|
#define COLOR_RED 4
|
||||||
#define COLOR_MAGENTA 5
|
#define COLOR_MAGENTA 5
|
||||||
#define COLOR_BROWN 6
|
#define COLOR_BROWN 6
|
||||||
#define COLOR_GRAY 7
|
#define COLOR_GRAY 7
|
||||||
|
|
||||||
#define COLOR_DARKGRAY 8
|
#define COLOR_DARKGRAY 8
|
||||||
#define COLOR_LIGHTBLUE 9
|
#define COLOR_LIGHTBLUE 9
|
||||||
#define COLOR_LIGHTGREEN 10
|
#define COLOR_LIGHTGREEN 10
|
||||||
#define COLOR_LIGHTCYAN 11
|
#define COLOR_LIGHTCYAN 11
|
||||||
#define COLOR_LIGHTRED 12
|
#define COLOR_LIGHTRED 12
|
||||||
#define COLOR_LIGHTMAGENTA 13
|
#define COLOR_LIGHTMAGENTA 13
|
||||||
#define COLOR_YELLOW 14
|
#define COLOR_YELLOW 14
|
||||||
#define COLOR_WHITE 15
|
#define COLOR_WHITE 15
|
||||||
|
|
||||||
/* Add COLOR_BLINK to a background to cause blinking */
|
/* Add COLOR_BLINK to a background to cause blinking */
|
||||||
//#define COLOR_BLINK 8
|
// #define COLOR_BLINK 8
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defines for IBM box drawing characters
|
* Defines for IBM box drawing characters
|
||||||
*/
|
*/
|
||||||
#define HORZ (0xc4) /* Single horizontal line */
|
#define HORZ 0xC4 // Single horizontal line
|
||||||
#define D_HORZ (0xcd) /* Double horizontal line.*/
|
#define D_HORZ 0xCD // Double horizontal line
|
||||||
#define VERT (0xb3) /* Single vertical line */
|
#define VERT 0xB3 // Single vertical line
|
||||||
#define D_VERT (0xba) /* Double vertical line. */
|
#define D_VERT 0xBA // Double vertical line
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* PROJECT: FreeLoader
|
* PROJECT: FreeLoader
|
||||||
* FILE: boot/freeldr/freeldr/include/ui/minitui.h
|
* FILE: boot/freeldr/freeldr/include/ui/minitui.h
|
||||||
* PURPOSE: Mini Text UI interface header
|
* PURPOSE: Mini Text UI interface header
|
||||||
* PROGRAMMERS: Hervé Poussineau
|
* PROGRAMMERS: Hervé Poussineau
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* PROJECT: FreeLoader
|
* PROJECT: FreeLoader
|
||||||
* FILE: boot/freeldr/freeldr/include/ui/noui.h
|
* FILE: boot/freeldr/freeldr/include/ui/noui.h
|
||||||
* PURPOSE: No UI interface header
|
* PURPOSE: No UI interface header
|
||||||
* PROGRAMMERS: Hervé Poussineau
|
* PROGRAMMERS: Hervé Poussineau
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
|
@ -78,25 +78,27 @@ TuiDisplayMenu(
|
||||||
IN UiMenuKeyPressFilterCallback KeyPressFilter OPTIONAL,
|
IN UiMenuKeyPressFilterCallback KeyPressFilter OPTIONAL,
|
||||||
IN PVOID Context OPTIONAL);
|
IN PVOID Context OPTIONAL);
|
||||||
|
|
||||||
/* Definitions for corners, depending on HORIZ and VERT */
|
/*
|
||||||
#define UL (0xda)
|
* Definitions for corners, depending on HORZ and VERT
|
||||||
#define UR (0xbf) /* HORZ and VERT */
|
*/
|
||||||
#define LL (0xc0)
|
#define UL 0xDA /* HORZ and VERT */
|
||||||
#define LR (0xd9)
|
#define UR 0xBF
|
||||||
|
#define LL 0xC0
|
||||||
|
#define LR 0xD9
|
||||||
|
|
||||||
#define D_UL (0xc9)
|
#define D_UL 0xC9 /* D_HORZ and D_VERT */
|
||||||
#define D_UR (0xbb) /* D_HORZ and D_VERT */
|
#define D_UR 0xBB
|
||||||
#define D_LL (0xc8)
|
#define D_LL 0xC8
|
||||||
#define D_LR (0xbc)
|
#define D_LR 0xBC
|
||||||
|
|
||||||
#define HD_UL (0xd5)
|
#define HD_UL 0xD5 /* D_HORZ and VERT */
|
||||||
#define HD_UR (0xb8) /* D_HORZ and VERT */
|
#define HD_UR 0xB8
|
||||||
#define HD_LL (0xd4)
|
#define HD_LL 0xD4
|
||||||
#define HD_LR (0xbe)
|
#define HD_LR 0xBE
|
||||||
|
|
||||||
#define VD_UL (0xd6)
|
#define VD_UL 0xD6 /* HORZ and D_VERT */
|
||||||
#define VD_UR (0xb7) /* HORZ and D_VERT */
|
#define VD_UR 0xB7
|
||||||
#define VD_LL (0xd3)
|
#define VD_LL 0xD3
|
||||||
#define VD_LR (0xbd)
|
#define VD_LR 0xBD
|
||||||
|
|
||||||
extern const UIVTBL TuiVtbl;
|
extern const UIVTBL TuiVtbl;
|
||||||
|
|
|
@ -6,27 +6,22 @@
|
||||||
* PROGRAMMERS: Brian Palmer <brianp@sginet.com>
|
* PROGRAMMERS: Brian Palmer <brianp@sginet.com>
|
||||||
* Hervé Poussineau
|
* Hervé Poussineau
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _M_ARM
|
#ifndef _M_ARM
|
||||||
#include <freeldr.h>
|
#include <freeldr.h>
|
||||||
|
|
||||||
VOID MiniTuiDrawBackdrop(VOID)
|
VOID MiniTuiDrawBackdrop(VOID)
|
||||||
{
|
{
|
||||||
//
|
/* Fill in a black background */
|
||||||
// Fill in a black background
|
|
||||||
//
|
|
||||||
TuiFillArea(0, 0, UiScreenWidth - 1, UiScreenHeight - 1, 0, 0);
|
TuiFillArea(0, 0, UiScreenWidth - 1, UiScreenHeight - 1, 0, 0);
|
||||||
|
|
||||||
//
|
/* Update the screen buffer */
|
||||||
// Update the screen buffer
|
|
||||||
//
|
|
||||||
VideoCopyOffScreenBufferToVRAM();
|
VideoCopyOffScreenBufferToVRAM();
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID MiniTuiDrawStatusText(PCSTR StatusText)
|
VOID MiniTuiDrawStatusText(PCSTR StatusText)
|
||||||
{
|
{
|
||||||
//
|
/* Minimal UI doesn't have a status bar */
|
||||||
// Minimal UI doesn't have a status bar
|
|
||||||
//
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID MiniTuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText)
|
VOID MiniTuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText)
|
||||||
|
@ -47,26 +42,22 @@ VOID MiniTuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressTex
|
||||||
|
|
||||||
VOID MiniTuiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, ULONG Position, ULONG Range, PCHAR ProgressText)
|
VOID MiniTuiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, ULONG Position, ULONG Range, PCHAR ProgressText)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
ULONG ProgressBarWidth = (Right - Left) - 3;
|
ULONG ProgressBarWidth = (Right - Left) - 3;
|
||||||
|
|
||||||
// First make sure the progress bar text fits
|
/* First make sure the progress bar text fits */
|
||||||
UiTruncateStringEllipsis(ProgressText, ProgressBarWidth - 4);
|
UiTruncateStringEllipsis(ProgressText, ProgressBarWidth - 4);
|
||||||
|
|
||||||
if (Position > Range)
|
if (Position > Range)
|
||||||
{
|
|
||||||
Position = Range;
|
Position = Range;
|
||||||
}
|
|
||||||
|
|
||||||
//
|
/* Draw the "Loading..." text */
|
||||||
// Draw the "Loading..." text
|
TuiDrawCenteredText(Left + 2, Top + 1, Right - 2, Top + 1, ProgressText, ATTR(COLOR_GRAY, COLOR_BLACK));
|
||||||
//
|
|
||||||
TuiDrawCenteredText(Left + 2, Top + 1, Right - 2, Top + 1, ProgressText, ATTR(7, 0));
|
|
||||||
|
|
||||||
// Draw the percent complete
|
/* Draw the percent complete */
|
||||||
for (i=0; i<(Position*ProgressBarWidth)/Range; i++)
|
for (i = 0; i < (Position * ProgressBarWidth) / Range; i++)
|
||||||
{
|
{
|
||||||
TuiDrawText(Left+2+i, Top+2, "\xDB", ATTR(UiTextColor, UiMenuBgColor));
|
/* Use the fill character */
|
||||||
|
TuiDrawText(Left + 2 + i, Top + 2, "\xDB", ATTR(UiTextColor, UiMenuBgColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
TuiUpdateDateTime();
|
TuiUpdateDateTime();
|
||||||
|
@ -78,14 +69,10 @@ MiniTuiDrawMenu(PUI_MENU_INFO MenuInfo)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
//
|
/* Draw the backdrop */
|
||||||
// Draw the backdrop
|
|
||||||
//
|
|
||||||
UiDrawBackdrop();
|
UiDrawBackdrop();
|
||||||
|
|
||||||
//
|
/* No GUI status bar text, just minimal text. Show the menu header. */
|
||||||
// No GUI status bar text, just minimal text. Show the menu header.
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuHeader)
|
if (MenuInfo->MenuHeader)
|
||||||
{
|
{
|
||||||
UiVtbl.DrawText(0,
|
UiVtbl.DrawText(0,
|
||||||
|
@ -94,9 +81,7 @@ MiniTuiDrawMenu(PUI_MENU_INFO MenuInfo)
|
||||||
ATTR(UiMenuFgColor, UiMenuBgColor));
|
ATTR(UiMenuFgColor, UiMenuBgColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Now tell the user how to choose */
|
||||||
// Now tell the user how to choose
|
|
||||||
//
|
|
||||||
UiVtbl.DrawText(0,
|
UiVtbl.DrawText(0,
|
||||||
MenuInfo->Bottom + 1,
|
MenuInfo->Bottom + 1,
|
||||||
"Use \x18 and \x19 to move the highlight to your choice.",
|
"Use \x18 and \x19 to move the highlight to your choice.",
|
||||||
|
@ -106,9 +91,7 @@ MiniTuiDrawMenu(PUI_MENU_INFO MenuInfo)
|
||||||
"Press ENTER to choose.",
|
"Press ENTER to choose.",
|
||||||
ATTR(UiMenuFgColor, UiMenuBgColor));
|
ATTR(UiMenuFgColor, UiMenuBgColor));
|
||||||
|
|
||||||
//
|
/* And show the menu footer */
|
||||||
// And show the menu footer
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuFooter)
|
if (MenuInfo->MenuFooter)
|
||||||
{
|
{
|
||||||
UiVtbl.DrawText(0,
|
UiVtbl.DrawText(0,
|
||||||
|
@ -117,22 +100,16 @@ MiniTuiDrawMenu(PUI_MENU_INFO MenuInfo)
|
||||||
ATTR(UiMenuFgColor, UiMenuBgColor));
|
ATTR(UiMenuFgColor, UiMenuBgColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Draw the menu box */
|
||||||
// Draw the menu box
|
|
||||||
//
|
|
||||||
TuiDrawMenuBox(MenuInfo);
|
TuiDrawMenuBox(MenuInfo);
|
||||||
|
|
||||||
//
|
/* Draw each line of the menu */
|
||||||
// Draw each line of the menu
|
|
||||||
//
|
|
||||||
for (i = 0; i < MenuInfo->MenuItemCount; i++)
|
for (i = 0; i < MenuInfo->MenuItemCount; i++)
|
||||||
{
|
{
|
||||||
TuiDrawMenuItem(MenuInfo, i);
|
TuiDrawMenuItem(MenuInfo, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Display the boot options if needed */
|
||||||
// Display the boot options if needed
|
|
||||||
//
|
|
||||||
if (MenuInfo->ShowBootOptions)
|
if (MenuInfo->ShowBootOptions)
|
||||||
{
|
{
|
||||||
DisplayBootTimeOptions();
|
DisplayBootTimeOptions();
|
||||||
|
@ -166,4 +143,5 @@ const UIVTBL MiniTuiVtbl =
|
||||||
TuiDisplayMenu,
|
TuiDisplayMenu,
|
||||||
MiniTuiDrawMenu,
|
MiniTuiDrawMenu,
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
#endif // _M_ARM
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* PROJECT: FreeLoader
|
* PROJECT: FreeLoader
|
||||||
* FILE: boot/freeldr/freeldr/ui/noui.c
|
* FILE: boot/freeldr/freeldr/ui/noui.c
|
||||||
* PURPOSE: No Text UI interface
|
* PURPOSE: No Text UI interface
|
||||||
* PROGRAMMERS: Hervé Poussineau
|
* PROGRAMMERS: Hervé Poussineau
|
||||||
*/
|
*/
|
||||||
#ifndef _M_ARM
|
#ifndef _M_ARM
|
||||||
#include <freeldr.h>
|
#include <freeldr.h>
|
||||||
|
|
|
@ -153,28 +153,23 @@ VOID TuiDrawBackdrop(VOID)
|
||||||
*/
|
*/
|
||||||
VOID TuiFillArea(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, CHAR FillChar, UCHAR Attr /* Color Attributes */)
|
VOID TuiFillArea(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, CHAR FillChar, UCHAR Attr /* Color Attributes */)
|
||||||
{
|
{
|
||||||
PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer;
|
PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer;
|
||||||
ULONG i, j;
|
ULONG i, j;
|
||||||
|
|
||||||
// Clip the area to the screen
|
/* Clip the area to the screen */
|
||||||
if ((Left >= UiScreenWidth) || (Top >= UiScreenHeight))
|
if ((Left >= UiScreenWidth) || (Top >= UiScreenHeight))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Right >= UiScreenWidth)
|
if (Right >= UiScreenWidth)
|
||||||
{
|
|
||||||
Right = UiScreenWidth - 1;
|
Right = UiScreenWidth - 1;
|
||||||
}
|
|
||||||
if (Bottom >= UiScreenHeight)
|
if (Bottom >= UiScreenHeight)
|
||||||
{
|
|
||||||
Bottom = UiScreenHeight - 1;
|
Bottom = UiScreenHeight - 1;
|
||||||
}
|
|
||||||
|
|
||||||
// Loop through each line and fill it in
|
/* Loop through each line and column and fill it in */
|
||||||
for (i=Top; i<=Bottom; i++)
|
for (i = Top; i <= Bottom; ++i)
|
||||||
{
|
{
|
||||||
// Loop through each character (column) in the line and fill it in
|
for (j = Left; j <= Right; ++j)
|
||||||
for (j=Left; j<=Right; j++)
|
|
||||||
{
|
{
|
||||||
ScreenMemory[((i*2)*UiScreenWidth)+(j*2)] = (UCHAR)FillChar;
|
ScreenMemory[((i*2)*UiScreenWidth)+(j*2)] = (UCHAR)FillChar;
|
||||||
ScreenMemory[((i*2)*UiScreenWidth)+(j*2)+1] = Attr;
|
ScreenMemory[((i*2)*UiScreenWidth)+(j*2)+1] = Attr;
|
||||||
|
@ -188,28 +183,24 @@ VOID TuiFillArea(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, CHAR FillChar
|
||||||
*/
|
*/
|
||||||
VOID TuiDrawShadow(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom)
|
VOID TuiDrawShadow(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom)
|
||||||
{
|
{
|
||||||
PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer;
|
PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer;
|
||||||
ULONG Idx;
|
ULONG Idx;
|
||||||
|
|
||||||
// Shade the bottom of the area
|
/* Shade the bottom of the area */
|
||||||
if (Bottom < (UiScreenHeight - 1))
|
if (Bottom < (UiScreenHeight - 1))
|
||||||
{
|
{
|
||||||
if (UiScreenHeight < 34)
|
if (UiScreenHeight < 34)
|
||||||
{
|
Idx = Left + 2;
|
||||||
Idx=Left + 2;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
Idx = Left + 1;
|
||||||
Idx=Left + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (; Idx<=Right; Idx++)
|
for (; Idx <= Right; ++Idx)
|
||||||
{
|
{
|
||||||
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+(Idx*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+(Idx*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shade the right of the area
|
/* Shade the right of the area */
|
||||||
if (Right < (UiScreenWidth - 1))
|
if (Right < (UiScreenWidth - 1))
|
||||||
{
|
{
|
||||||
for (Idx=Top+1; Idx<=Bottom; Idx++)
|
for (Idx=Top+1; Idx<=Bottom; Idx++)
|
||||||
|
@ -228,7 +219,7 @@ VOID TuiDrawShadow(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shade the bottom right corner
|
/* Shade the bottom right corner */
|
||||||
if ((Right < (UiScreenWidth - 1)) && (Bottom < (UiScreenHeight - 1)))
|
if ((Right < (UiScreenWidth - 1)) && (Bottom < (UiScreenHeight - 1)))
|
||||||
{
|
{
|
||||||
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+((Right+1)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+((Right+1)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||||
|
@ -648,9 +639,9 @@ VOID TuiMessageBoxCritical(PCSTR MessageText)
|
||||||
|
|
||||||
VOID TuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText)
|
VOID TuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText)
|
||||||
{
|
{
|
||||||
ULONG Left, Top, Right, Bottom;
|
ULONG Left, Top, Right, Bottom;
|
||||||
ULONG Width = 50; // Allow for 50 "bars"
|
ULONG Width = 50; // Allow for 50 "bars"
|
||||||
ULONG Height = 2;
|
ULONG Height = 2;
|
||||||
|
|
||||||
Left = (UiScreenWidth - Width - 4) / 2;
|
Left = (UiScreenWidth - Width - 4) / 2;
|
||||||
Right = Left + Width + 3;
|
Right = Left + Width + 3;
|
||||||
|
@ -663,35 +654,32 @@ VOID TuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText)
|
||||||
|
|
||||||
VOID TuiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, ULONG Position, ULONG Range, PCHAR ProgressText)
|
VOID TuiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, ULONG Position, ULONG Range, PCHAR ProgressText)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
ULONG ProgressBarWidth = (Right - Left) - 3;
|
ULONG ProgressBarWidth = (Right - Left) - 3;
|
||||||
|
|
||||||
// First make sure the progress bar text fits
|
/* First make sure the progress bar text fits */
|
||||||
UiTruncateStringEllipsis(ProgressText, ProgressBarWidth - 4);
|
UiTruncateStringEllipsis(ProgressText, ProgressBarWidth - 4);
|
||||||
|
|
||||||
if (Position > Range)
|
if (Position > Range)
|
||||||
{
|
|
||||||
Position = Range;
|
Position = Range;
|
||||||
}
|
|
||||||
|
|
||||||
// Draw the box
|
/* Draw the box */
|
||||||
TuiDrawBox(Left, Top, Right, Bottom, VERT, HORZ, TRUE, TRUE, ATTR(UiMenuFgColor, UiMenuBgColor));
|
TuiDrawBox(Left, Top, Right, Bottom, VERT, HORZ, TRUE, TRUE, ATTR(UiMenuFgColor, UiMenuBgColor));
|
||||||
|
|
||||||
//
|
/* Draw the "Loading..." text */
|
||||||
// Draw the "Loading..." text
|
|
||||||
//
|
|
||||||
TuiDrawCenteredText(Left + 2, Top + 2, Right - 2, Top + 2, ProgressText, ATTR(UiTextColor, UiMenuBgColor));
|
TuiDrawCenteredText(Left + 2, Top + 2, Right - 2, Top + 2, ProgressText, ATTR(UiTextColor, UiMenuBgColor));
|
||||||
|
|
||||||
// Draw the percent complete
|
/* Draw the percent complete */
|
||||||
for (i=0; i<(Position*ProgressBarWidth)/Range; i++)
|
for (i = 0; i < (Position * ProgressBarWidth) / Range; i++)
|
||||||
{
|
{
|
||||||
TuiDrawText(Left+2+i, Top+2, "\xDB", ATTR(UiTextColor, UiMenuBgColor));
|
/* Use the fill character */
|
||||||
|
TuiDrawText(Left + 2 + i, Top + 2, "\xDB", ATTR(UiTextColor, UiMenuBgColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the shadow
|
/* Draw the shadow */
|
||||||
for (; i<ProgressBarWidth; i++)
|
for (; i < ProgressBarWidth; i++)
|
||||||
{
|
{
|
||||||
TuiDrawText(Left+2+i, Top+2, "\xB2", ATTR(UiTextColor, UiMenuBgColor));
|
TuiDrawText(Left + 2 + i, Top + 2, "\xB2", ATTR(UiTextColor, UiMenuBgColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
TuiUpdateDateTime();
|
TuiUpdateDateTime();
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* INCLUDES ******************************************************************/
|
/* INCLUDES ******************************************************************/
|
||||||
|
|
||||||
#ifndef _M_ARM
|
#ifndef _M_ARM
|
||||||
#include <freeldr.h>
|
#include <freeldr.h>
|
||||||
|
|
||||||
|
@ -32,49 +33,39 @@ TuiDisplayMenu(
|
||||||
ULONG CurrentClockSecond;
|
ULONG CurrentClockSecond;
|
||||||
ULONG KeyPress;
|
ULONG KeyPress;
|
||||||
|
|
||||||
//
|
/*
|
||||||
// Before taking any default action if there is no timeout,
|
* Before taking any default action if there is no timeout,
|
||||||
// check whether the supplied key filter callback function
|
* check whether the supplied key filter callback function
|
||||||
// may handle a specific user keypress. If it does, the
|
* may handle a specific user keypress. If it does, the
|
||||||
// timeout is cancelled.
|
* timeout is cancelled.
|
||||||
//
|
*/
|
||||||
if (!MenuTimeOut && KeyPressFilter && MachConsKbHit())
|
if (!MenuTimeOut && KeyPressFilter && MachConsKbHit())
|
||||||
{
|
{
|
||||||
//
|
/* Get the key (get the extended key if needed) */
|
||||||
// Get the key (get the extended key if needed)
|
|
||||||
//
|
|
||||||
KeyPress = MachConsGetCh();
|
KeyPress = MachConsGetCh();
|
||||||
if (KeyPress == KEY_EXTENDED)
|
if (KeyPress == KEY_EXTENDED)
|
||||||
KeyPress = MachConsGetCh();
|
KeyPress = MachConsGetCh();
|
||||||
|
|
||||||
//
|
/*
|
||||||
// Call the supplied key filter callback function to see
|
* Call the supplied key filter callback function to see
|
||||||
// if it is going to handle this keypress.
|
* if it is going to handle this keypress.
|
||||||
//
|
*/
|
||||||
if (KeyPressFilter(KeyPress, DefaultMenuItem, Context))
|
if (KeyPressFilter(KeyPress, DefaultMenuItem, Context))
|
||||||
{
|
{
|
||||||
//
|
/* It processed the key character, cancel the timeout */
|
||||||
// It processed the key character, cancel the timeout
|
|
||||||
//
|
|
||||||
MenuTimeOut = -1;
|
MenuTimeOut = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Check if there is no timeout */
|
||||||
// Check if there's no timeout
|
|
||||||
//
|
|
||||||
if (!MenuTimeOut)
|
if (!MenuTimeOut)
|
||||||
{
|
{
|
||||||
//
|
/* Return the default selected item */
|
||||||
// Return the default selected item
|
|
||||||
//
|
|
||||||
if (SelectedMenuItem) *SelectedMenuItem = DefaultMenuItem;
|
if (SelectedMenuItem) *SelectedMenuItem = DefaultMenuItem;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Setup the MENU_INFO structure */
|
||||||
// Setup the MENU_INFO structure
|
|
||||||
//
|
|
||||||
MenuInformation.MenuHeader = MenuHeader;
|
MenuInformation.MenuHeader = MenuHeader;
|
||||||
MenuInformation.MenuFooter = MenuFooter;
|
MenuInformation.MenuFooter = MenuFooter;
|
||||||
MenuInformation.ShowBootOptions = ShowBootOptions;
|
MenuInformation.ShowBootOptions = ShowBootOptions;
|
||||||
|
@ -84,85 +75,57 @@ TuiDisplayMenu(
|
||||||
MenuInformation.SelectedMenuItem = DefaultMenuItem;
|
MenuInformation.SelectedMenuItem = DefaultMenuItem;
|
||||||
MenuInformation.Context = Context;
|
MenuInformation.Context = Context;
|
||||||
|
|
||||||
//
|
/* Calculate the size of the menu box */
|
||||||
// Calculate the size of the menu box
|
|
||||||
//
|
|
||||||
TuiCalcMenuBoxSize(&MenuInformation);
|
TuiCalcMenuBoxSize(&MenuInformation);
|
||||||
|
|
||||||
//
|
/* Draw the menu */
|
||||||
// Draw the menu
|
|
||||||
//
|
|
||||||
UiVtbl.DrawMenu(&MenuInformation);
|
UiVtbl.DrawMenu(&MenuInformation);
|
||||||
|
|
||||||
//
|
/* Get the current second of time */
|
||||||
// Get the current second of time
|
|
||||||
//
|
|
||||||
LastClockSecond = ArcGetTime()->Second;
|
LastClockSecond = ArcGetTime()->Second;
|
||||||
|
|
||||||
//
|
/* Process keys */
|
||||||
// Process keys
|
|
||||||
//
|
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
{
|
{
|
||||||
//
|
/* Process key presses */
|
||||||
// Process key presses
|
|
||||||
//
|
|
||||||
KeyPress = TuiProcessMenuKeyboardEvent(&MenuInformation, KeyPressFilter);
|
KeyPress = TuiProcessMenuKeyboardEvent(&MenuInformation, KeyPressFilter);
|
||||||
|
|
||||||
//
|
/* Check for ENTER or ESC */
|
||||||
// Check for ENTER or ESC
|
|
||||||
//
|
|
||||||
if (KeyPress == KEY_ENTER) break;
|
if (KeyPress == KEY_ENTER) break;
|
||||||
if (CanEscape && KeyPress == KEY_ESC) return FALSE;
|
if (CanEscape && KeyPress == KEY_ESC) return FALSE;
|
||||||
|
|
||||||
//
|
/* Update the date & time */
|
||||||
// Update the date & time
|
|
||||||
//
|
|
||||||
TuiUpdateDateTime();
|
TuiUpdateDateTime();
|
||||||
VideoCopyOffScreenBufferToVRAM();
|
VideoCopyOffScreenBufferToVRAM();
|
||||||
|
|
||||||
//
|
/* Check if there is a countdown */
|
||||||
// Check if there is a countdown
|
|
||||||
//
|
|
||||||
if (MenuInformation.MenuTimeRemaining > 0)
|
if (MenuInformation.MenuTimeRemaining > 0)
|
||||||
{
|
{
|
||||||
//
|
/* Get the updated time, seconds only */
|
||||||
// Get the updated time, seconds only
|
|
||||||
//
|
|
||||||
CurrentClockSecond = ArcGetTime()->Second;
|
CurrentClockSecond = ArcGetTime()->Second;
|
||||||
|
|
||||||
//
|
/* Check if more than a second has now elapsed */
|
||||||
// Check if more then a second has now elapsed
|
|
||||||
//
|
|
||||||
if (CurrentClockSecond != LastClockSecond)
|
if (CurrentClockSecond != LastClockSecond)
|
||||||
{
|
{
|
||||||
//
|
/* Update the time information */
|
||||||
// Update the time information
|
|
||||||
//
|
|
||||||
LastClockSecond = CurrentClockSecond;
|
LastClockSecond = CurrentClockSecond;
|
||||||
MenuInformation.MenuTimeRemaining--;
|
MenuInformation.MenuTimeRemaining--;
|
||||||
|
|
||||||
//
|
/* Update the menu */
|
||||||
// Update the menu
|
|
||||||
//
|
|
||||||
TuiDrawMenuBox(&MenuInformation);
|
TuiDrawMenuBox(&MenuInformation);
|
||||||
VideoCopyOffScreenBufferToVRAM();
|
VideoCopyOffScreenBufferToVRAM();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (MenuInformation.MenuTimeRemaining == 0)
|
else if (MenuInformation.MenuTimeRemaining == 0)
|
||||||
{
|
{
|
||||||
//
|
/* A time out occurred, exit this loop and return default OS */
|
||||||
// A time out occurred, exit this loop and return default OS
|
|
||||||
//
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
MachHwIdle();
|
MachHwIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Return the selected item */
|
||||||
// Return the selected item
|
|
||||||
//
|
|
||||||
if (SelectedMenuItem) *SelectedMenuItem = MenuInformation.SelectedMenuItem;
|
if (SelectedMenuItem) *SelectedMenuItem = MenuInformation.SelectedMenuItem;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -175,20 +138,14 @@ TuiCalcMenuBoxSize(PUI_MENU_INFO MenuInfo)
|
||||||
ULONG Height;
|
ULONG Height;
|
||||||
ULONG Length;
|
ULONG Length;
|
||||||
|
|
||||||
//
|
/* Height is the menu item count plus 2 (top border & bottom border) */
|
||||||
// Height is the menu item count plus 2 (top border & bottom border)
|
|
||||||
//
|
|
||||||
Height = MenuInfo->MenuItemCount + 2;
|
Height = MenuInfo->MenuItemCount + 2;
|
||||||
Height -= 1; // Height is zero-based
|
Height -= 1; // Height is zero-based
|
||||||
|
|
||||||
//
|
/* Loop every item */
|
||||||
// Loop every item
|
for (i = 0; i < MenuInfo->MenuItemCount; i++)
|
||||||
//
|
|
||||||
for(i = 0; i < MenuInfo->MenuItemCount; i++)
|
|
||||||
{
|
{
|
||||||
//
|
/* Get the string length and make it become the new width if necessary */
|
||||||
// Get the string length and make it become the new width if necessary
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuItemList[i])
|
if (MenuInfo->MenuItemList[i])
|
||||||
{
|
{
|
||||||
Length = (ULONG)strlen(MenuInfo->MenuItemList[i]);
|
Length = (ULONG)strlen(MenuInfo->MenuItemList[i]);
|
||||||
|
@ -196,35 +153,25 @@ TuiCalcMenuBoxSize(PUI_MENU_INFO MenuInfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Allow room for left & right borders, plus 8 spaces on each side */
|
||||||
// Allow room for left & right borders, plus 8 spaces on each side
|
|
||||||
//
|
|
||||||
Width += 18;
|
Width += 18;
|
||||||
|
|
||||||
//
|
/* Check if we're drawing a centered menu */
|
||||||
// Check if we're drawing a centered menu
|
|
||||||
//
|
|
||||||
if (UiCenterMenu)
|
if (UiCenterMenu)
|
||||||
{
|
{
|
||||||
//
|
/* Calculate the menu box area for a centered menu */
|
||||||
// Calculate the menu box area for a centered menu
|
|
||||||
//
|
|
||||||
MenuInfo->Left = (UiScreenWidth - Width) / 2;
|
MenuInfo->Left = (UiScreenWidth - Width) / 2;
|
||||||
MenuInfo->Top = (((UiScreenHeight - TUI_TITLE_BOX_CHAR_HEIGHT) -
|
MenuInfo->Top = (((UiScreenHeight - TUI_TITLE_BOX_CHAR_HEIGHT) -
|
||||||
Height) / 2) + TUI_TITLE_BOX_CHAR_HEIGHT;
|
Height) / 2) + TUI_TITLE_BOX_CHAR_HEIGHT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
/* Put the menu in the default left-corner position */
|
||||||
// Put the menu in the default left-corner position
|
|
||||||
//
|
|
||||||
MenuInfo->Left = -1;
|
MenuInfo->Left = -1;
|
||||||
MenuInfo->Top = 4;
|
MenuInfo->Top = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* The other margins are the same */
|
||||||
// The other margins are the same
|
|
||||||
//
|
|
||||||
MenuInfo->Right = (MenuInfo->Left) + Width;
|
MenuInfo->Right = (MenuInfo->Left) + Width;
|
||||||
MenuInfo->Bottom = (MenuInfo->Top) + Height;
|
MenuInfo->Bottom = (MenuInfo->Top) + Height;
|
||||||
}
|
}
|
||||||
|
@ -234,24 +181,16 @@ TuiDrawMenu(PUI_MENU_INFO MenuInfo)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
//
|
/* Draw the backdrop */
|
||||||
// Draw the backdrop
|
|
||||||
//
|
|
||||||
UiDrawBackdrop();
|
UiDrawBackdrop();
|
||||||
|
|
||||||
//
|
/* Update the status bar */
|
||||||
// Update the status bar
|
|
||||||
//
|
|
||||||
UiVtbl.DrawStatusText("Use \x18 and \x19 to select, then press ENTER.");
|
UiVtbl.DrawStatusText("Use \x18 and \x19 to select, then press ENTER.");
|
||||||
|
|
||||||
//
|
/* Draw the menu box */
|
||||||
// Draw the menu box
|
|
||||||
//
|
|
||||||
TuiDrawMenuBox(MenuInfo);
|
TuiDrawMenuBox(MenuInfo);
|
||||||
|
|
||||||
//
|
/* Draw each line of the menu */
|
||||||
// Draw each line of the menu
|
|
||||||
//
|
|
||||||
for (i = 0; i < MenuInfo->MenuItemCount; i++)
|
for (i = 0; i < MenuInfo->MenuItemCount; i++)
|
||||||
{
|
{
|
||||||
TuiDrawMenuItem(MenuInfo, i);
|
TuiDrawMenuItem(MenuInfo, i);
|
||||||
|
@ -272,9 +211,7 @@ TuiDrawMenuBox(PUI_MENU_INFO MenuInfo)
|
||||||
CHAR MenuLineText[80], TempString[80];
|
CHAR MenuLineText[80], TempString[80];
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
//
|
/* Draw the menu box if requested */
|
||||||
// Draw the menu box if requested
|
|
||||||
//
|
|
||||||
if (UiMenuBox)
|
if (UiMenuBox)
|
||||||
{
|
{
|
||||||
UiDrawBox(MenuInfo->Left,
|
UiDrawBox(MenuInfo->Left,
|
||||||
|
@ -283,43 +220,31 @@ TuiDrawMenuBox(PUI_MENU_INFO MenuInfo)
|
||||||
MenuInfo->Bottom,
|
MenuInfo->Bottom,
|
||||||
D_VERT,
|
D_VERT,
|
||||||
D_HORZ,
|
D_HORZ,
|
||||||
FALSE, // Filled
|
FALSE, // Filled
|
||||||
TRUE, // Shadow
|
TRUE, // Shadow
|
||||||
ATTR(UiMenuFgColor, UiMenuBgColor));
|
ATTR(UiMenuFgColor, UiMenuBgColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* If there is a timeout draw the time remaining */
|
||||||
// If there is a timeout draw the time remaining
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuTimeRemaining >= 0)
|
if (MenuInfo->MenuTimeRemaining >= 0)
|
||||||
{
|
{
|
||||||
//
|
/* Copy the integral time text string, and remove the last 2 chars */
|
||||||
// Copy the integral time text string, and remove the last 2 chars
|
|
||||||
//
|
|
||||||
strcpy(TempString, UiTimeText);
|
strcpy(TempString, UiTimeText);
|
||||||
i = (ULONG)strlen(TempString);
|
i = (ULONG)strlen(TempString);
|
||||||
TempString[i - 2] = 0;
|
TempString[i - 2] = 0;
|
||||||
|
|
||||||
//
|
/* Display the first part of the string and the remaining time */
|
||||||
// Display the first part of the string and the remaining time
|
|
||||||
//
|
|
||||||
strcpy(MenuLineText, TempString);
|
strcpy(MenuLineText, TempString);
|
||||||
_itoa(MenuInfo->MenuTimeRemaining, TempString, 10);
|
_itoa(MenuInfo->MenuTimeRemaining, TempString, 10);
|
||||||
strcat(MenuLineText, TempString);
|
strcat(MenuLineText, TempString);
|
||||||
|
|
||||||
//
|
/* Add the last 2 chars */
|
||||||
// Add the last 2 chars
|
|
||||||
//
|
|
||||||
strcat(MenuLineText, &UiTimeText[i - 2]);
|
strcat(MenuLineText, &UiTimeText[i - 2]);
|
||||||
|
|
||||||
//
|
/* Check if this is a centered menu */
|
||||||
// Check if this is a centered menu
|
|
||||||
//
|
|
||||||
if (UiCenterMenu)
|
if (UiCenterMenu)
|
||||||
{
|
{
|
||||||
//
|
/* Display it in the center of the menu */
|
||||||
// Display it in the center of the menu
|
|
||||||
//
|
|
||||||
UiDrawText(MenuInfo->Right - (ULONG)strlen(MenuLineText) - 1,
|
UiDrawText(MenuInfo->Right - (ULONG)strlen(MenuLineText) - 1,
|
||||||
MenuInfo->Bottom,
|
MenuInfo->Bottom,
|
||||||
MenuLineText,
|
MenuLineText,
|
||||||
|
@ -327,9 +252,7 @@ TuiDrawMenuBox(PUI_MENU_INFO MenuInfo)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
/* Display under the menu directly */
|
||||||
// Display under the menu directly
|
|
||||||
//
|
|
||||||
UiDrawText(0,
|
UiDrawText(0,
|
||||||
MenuInfo->Bottom + 4,
|
MenuInfo->Bottom + 4,
|
||||||
MenuLineText,
|
MenuLineText,
|
||||||
|
@ -338,18 +261,14 @@ TuiDrawMenuBox(PUI_MENU_INFO MenuInfo)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
/* Erase the timeout string with spaces, and 0-terminate for sure */
|
||||||
// Erase the timeout string with spaces, and 0-terminate for sure
|
for (i = 0; i < sizeof(MenuLineText)-1; i++)
|
||||||
//
|
|
||||||
for (i=0; i<sizeof(MenuLineText)-1; i++)
|
|
||||||
{
|
{
|
||||||
MenuLineText[i] = ' ';
|
MenuLineText[i] = ' ';
|
||||||
}
|
}
|
||||||
MenuLineText[sizeof(MenuLineText)-1] = 0;
|
MenuLineText[sizeof(MenuLineText)-1] = 0;
|
||||||
|
|
||||||
//
|
/* Draw this "empty" string to erase */
|
||||||
// Draw this "empty" string to erase
|
|
||||||
//
|
|
||||||
if (UiCenterMenu)
|
if (UiCenterMenu)
|
||||||
{
|
{
|
||||||
UiDrawText(MenuInfo->Right - (ULONG)strlen(MenuLineText) - 1,
|
UiDrawText(MenuInfo->Right - (ULONG)strlen(MenuLineText) - 1,
|
||||||
|
@ -366,19 +285,13 @@ TuiDrawMenuBox(PUI_MENU_INFO MenuInfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Loop each item */
|
||||||
// Loop each item
|
|
||||||
//
|
|
||||||
for (i = 0; i < MenuInfo->MenuItemCount; i++)
|
for (i = 0; i < MenuInfo->MenuItemCount; i++)
|
||||||
{
|
{
|
||||||
//
|
/* Check if it's a separator */
|
||||||
// Check if it's a separator
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuItemList[i] == NULL)
|
if (MenuInfo->MenuItemList[i] == NULL)
|
||||||
{
|
{
|
||||||
//
|
/* Draw the separator line */
|
||||||
// Draw the separator line
|
|
||||||
//
|
|
||||||
UiDrawText(MenuInfo->Left,
|
UiDrawText(MenuInfo->Left,
|
||||||
MenuInfo->Top + i + 1,
|
MenuInfo->Top + i + 1,
|
||||||
"\xC7",
|
"\xC7",
|
||||||
|
@ -396,76 +309,62 @@ TuiDrawMenuItem(PUI_MENU_INFO MenuInfo,
|
||||||
ULONG MenuItemNumber)
|
ULONG MenuItemNumber)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
CHAR MenuLineText[80];
|
CHAR MenuLineText[80];
|
||||||
ULONG SpaceTotal;
|
ULONG SpaceTotal;
|
||||||
ULONG SpaceLeft;
|
ULONG SpaceLeft;
|
||||||
ULONG SpaceRight = 0;
|
ULONG SpaceRight = 0;
|
||||||
UCHAR Attribute = ATTR(UiTextColor, UiMenuBgColor);
|
UCHAR Attribute = ATTR(UiTextColor, UiMenuBgColor);
|
||||||
|
|
||||||
//
|
/* Check if using centered menu */
|
||||||
// Check if using centered menu
|
|
||||||
//
|
|
||||||
if (UiCenterMenu)
|
if (UiCenterMenu)
|
||||||
{
|
{
|
||||||
//
|
/*
|
||||||
// We will want the string centered so calculate
|
* We will want the string centered so calculate
|
||||||
// how many spaces will be to the left and right
|
* how many spaces will be to the left and right.
|
||||||
//
|
*/
|
||||||
SpaceTotal = (MenuInfo->Right - MenuInfo->Left - 2) -
|
SpaceTotal = (MenuInfo->Right - MenuInfo->Left - 2) -
|
||||||
(ULONG)(MenuInfo->MenuItemList[MenuItemNumber] ?
|
(ULONG)(MenuInfo->MenuItemList[MenuItemNumber] ?
|
||||||
strlen(MenuInfo->MenuItemList[MenuItemNumber]) : 0);
|
strlen(MenuInfo->MenuItemList[MenuItemNumber]) : 0);
|
||||||
SpaceLeft = (SpaceTotal / 2) + 1;
|
SpaceLeft = (SpaceTotal / 2) + 1;
|
||||||
SpaceRight = (SpaceTotal - SpaceLeft) + 1;
|
SpaceRight = (SpaceTotal - SpaceLeft) + 1;
|
||||||
|
|
||||||
//
|
/* Insert the spaces on the left */
|
||||||
// Insert the spaces on the left
|
|
||||||
//
|
|
||||||
for (i = 0; i < SpaceLeft; i++) MenuLineText[i] = ' ';
|
for (i = 0; i < SpaceLeft; i++) MenuLineText[i] = ' ';
|
||||||
MenuLineText[i] = '\0';
|
MenuLineText[i] = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
/* Simply left-align it */
|
||||||
// Simply left-align it
|
|
||||||
//
|
|
||||||
MenuLineText[0] = '\0';
|
MenuLineText[0] = '\0';
|
||||||
strcat(MenuLineText, " ");
|
strcat(MenuLineText, " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Now append the text string */
|
||||||
// Now append the text string
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuItemList[MenuItemNumber])
|
if (MenuInfo->MenuItemList[MenuItemNumber])
|
||||||
strcat(MenuLineText, MenuInfo->MenuItemList[MenuItemNumber]);
|
strcat(MenuLineText, MenuInfo->MenuItemList[MenuItemNumber]);
|
||||||
|
|
||||||
//
|
/* Check if using centered menu, and add spaces on the right if so */
|
||||||
// Check if using centered menu, and add spaces on the right if so
|
if (UiCenterMenu)
|
||||||
//
|
{
|
||||||
if (UiCenterMenu) for (i=0; i < SpaceRight; i++) strcat(MenuLineText, " ");
|
for (i = 0; i < SpaceRight; i++)
|
||||||
|
strcat(MenuLineText, " ");
|
||||||
|
}
|
||||||
|
|
||||||
//
|
/* If it is a separator */
|
||||||
// If it is a separator
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuItemList[MenuItemNumber] == NULL)
|
if (MenuInfo->MenuItemList[MenuItemNumber] == NULL)
|
||||||
{
|
{
|
||||||
//
|
/* Make it a separator line and use menu colors */
|
||||||
// Make it a separator line and use menu colors
|
|
||||||
//
|
|
||||||
memset(MenuLineText, 0, sizeof(MenuLineText));
|
memset(MenuLineText, 0, sizeof(MenuLineText));
|
||||||
memset(MenuLineText, 0xC4, (MenuInfo->Right - MenuInfo->Left - 1));
|
memset(MenuLineText, 0xC4, (MenuInfo->Right - MenuInfo->Left - 1));
|
||||||
Attribute = ATTR(UiMenuFgColor, UiMenuBgColor);
|
Attribute = ATTR(UiMenuFgColor, UiMenuBgColor);
|
||||||
}
|
}
|
||||||
else if (MenuItemNumber == MenuInfo->SelectedMenuItem)
|
else if (MenuItemNumber == MenuInfo->SelectedMenuItem)
|
||||||
{
|
{
|
||||||
//
|
/* If this is the selected item, use the selected colors */
|
||||||
// If this is the selected item, use the selected colors
|
|
||||||
//
|
|
||||||
Attribute = ATTR(UiSelectedTextColor, UiSelectedTextBgColor);
|
Attribute = ATTR(UiSelectedTextColor, UiSelectedTextBgColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Draw the item */
|
||||||
// Draw the item
|
|
||||||
//
|
|
||||||
UiDrawText(MenuInfo->Left + 1,
|
UiDrawText(MenuInfo->Left + 1,
|
||||||
MenuInfo->Top + 1 + MenuItemNumber,
|
MenuInfo->Top + 1 + MenuItemNumber,
|
||||||
MenuLineText,
|
MenuLineText,
|
||||||
|
@ -479,70 +378,52 @@ TuiProcessMenuKeyboardEvent(PUI_MENU_INFO MenuInfo,
|
||||||
ULONG KeyEvent = 0;
|
ULONG KeyEvent = 0;
|
||||||
ULONG Selected, Count;
|
ULONG Selected, Count;
|
||||||
|
|
||||||
//
|
/* Check for a keypress */
|
||||||
// Check for a keypress
|
|
||||||
//
|
|
||||||
if (!MachConsKbHit())
|
if (!MachConsKbHit())
|
||||||
return 0; // None, bail out
|
return 0; // None, bail out
|
||||||
|
|
||||||
//
|
/* Check if the timeout is not already complete */
|
||||||
// Check if the timeout is not already complete
|
|
||||||
//
|
|
||||||
if (MenuInfo->MenuTimeRemaining != -1)
|
if (MenuInfo->MenuTimeRemaining != -1)
|
||||||
{
|
{
|
||||||
//
|
/* Cancel it and remove it */
|
||||||
// Cancel it and remove it
|
|
||||||
//
|
|
||||||
MenuInfo->MenuTimeRemaining = -1;
|
MenuInfo->MenuTimeRemaining = -1;
|
||||||
TuiDrawMenuBox(MenuInfo); // FIXME: Remove for minimal UI too
|
TuiDrawMenuBox(MenuInfo); // FIXME: Remove for minimal UI too
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Get the key (get the extended key if needed) */
|
||||||
// Get the key (get the extended key if needed)
|
|
||||||
//
|
|
||||||
KeyEvent = MachConsGetCh();
|
KeyEvent = MachConsGetCh();
|
||||||
if (KeyEvent == KEY_EXTENDED)
|
if (KeyEvent == KEY_EXTENDED)
|
||||||
KeyEvent = MachConsGetCh();
|
KeyEvent = MachConsGetCh();
|
||||||
|
|
||||||
//
|
/*
|
||||||
// Call the supplied key filter callback function to see
|
* Call the supplied key filter callback function to see
|
||||||
// if it is going to handle this keypress.
|
* if it is going to handle this keypress.
|
||||||
//
|
*/
|
||||||
if (KeyPressFilter &&
|
if (KeyPressFilter &&
|
||||||
KeyPressFilter(KeyEvent, MenuInfo->SelectedMenuItem, MenuInfo->Context))
|
KeyPressFilter(KeyEvent, MenuInfo->SelectedMenuItem, MenuInfo->Context))
|
||||||
{
|
{
|
||||||
//
|
/* It processed the key character, so redraw and exit */
|
||||||
// It processed the key character, so redraw and exit
|
|
||||||
//
|
|
||||||
UiVtbl.DrawMenu(MenuInfo);
|
UiVtbl.DrawMenu(MenuInfo);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Process the key */
|
||||||
// Process the key
|
|
||||||
//
|
|
||||||
if ((KeyEvent == KEY_UP ) || (KeyEvent == KEY_DOWN) ||
|
if ((KeyEvent == KEY_UP ) || (KeyEvent == KEY_DOWN) ||
|
||||||
(KeyEvent == KEY_HOME) || (KeyEvent == KEY_END ))
|
(KeyEvent == KEY_HOME) || (KeyEvent == KEY_END ))
|
||||||
{
|
{
|
||||||
//
|
/* Get the current selected item and count */
|
||||||
// Get the current selected item and count
|
|
||||||
//
|
|
||||||
Selected = MenuInfo->SelectedMenuItem;
|
Selected = MenuInfo->SelectedMenuItem;
|
||||||
Count = MenuInfo->MenuItemCount - 1;
|
Count = MenuInfo->MenuItemCount - 1;
|
||||||
|
|
||||||
//
|
/* Check the key and change the selected menu item */
|
||||||
// Check the key and change the selected menu item
|
|
||||||
//
|
|
||||||
if ((KeyEvent == KEY_UP) && (Selected > 0))
|
if ((KeyEvent == KEY_UP) && (Selected > 0))
|
||||||
{
|
{
|
||||||
//
|
/* Deselect previous item and go up */
|
||||||
// Deselect previous item and go up
|
|
||||||
//
|
|
||||||
MenuInfo->SelectedMenuItem--;
|
MenuInfo->SelectedMenuItem--;
|
||||||
TuiDrawMenuItem(MenuInfo, Selected);
|
TuiDrawMenuItem(MenuInfo, Selected);
|
||||||
Selected--;
|
Selected--;
|
||||||
|
|
||||||
// Skip past any separators
|
/* Skip past any separators */
|
||||||
if ((Selected > 0) &&
|
if ((Selected > 0) &&
|
||||||
(MenuInfo->MenuItemList[Selected] == NULL))
|
(MenuInfo->MenuItemList[Selected] == NULL))
|
||||||
{
|
{
|
||||||
|
@ -552,22 +433,18 @@ TuiProcessMenuKeyboardEvent(PUI_MENU_INFO MenuInfo,
|
||||||
else if ( ((KeyEvent == KEY_UP) && (Selected == 0)) ||
|
else if ( ((KeyEvent == KEY_UP) && (Selected == 0)) ||
|
||||||
(KeyEvent == KEY_END) )
|
(KeyEvent == KEY_END) )
|
||||||
{
|
{
|
||||||
//
|
/* Go to the end */
|
||||||
// Go to the end
|
|
||||||
//
|
|
||||||
MenuInfo->SelectedMenuItem = Count;
|
MenuInfo->SelectedMenuItem = Count;
|
||||||
TuiDrawMenuItem(MenuInfo, Selected);
|
TuiDrawMenuItem(MenuInfo, Selected);
|
||||||
}
|
}
|
||||||
else if ((KeyEvent == KEY_DOWN) && (Selected < Count))
|
else if ((KeyEvent == KEY_DOWN) && (Selected < Count))
|
||||||
{
|
{
|
||||||
//
|
/* Deselect previous item and go down */
|
||||||
// Deselect previous item and go down
|
|
||||||
//
|
|
||||||
MenuInfo->SelectedMenuItem++;
|
MenuInfo->SelectedMenuItem++;
|
||||||
TuiDrawMenuItem(MenuInfo, Selected);
|
TuiDrawMenuItem(MenuInfo, Selected);
|
||||||
Selected++;
|
Selected++;
|
||||||
|
|
||||||
// Skip past any separators
|
/* Skip past any separators */
|
||||||
if ((Selected < Count) &&
|
if ((Selected < Count) &&
|
||||||
(MenuInfo->MenuItemList[Selected] == NULL))
|
(MenuInfo->MenuItemList[Selected] == NULL))
|
||||||
{
|
{
|
||||||
|
@ -577,23 +454,18 @@ TuiProcessMenuKeyboardEvent(PUI_MENU_INFO MenuInfo,
|
||||||
else if ( ((KeyEvent == KEY_DOWN) && (Selected == Count)) ||
|
else if ( ((KeyEvent == KEY_DOWN) && (Selected == Count)) ||
|
||||||
(KeyEvent == KEY_HOME) )
|
(KeyEvent == KEY_HOME) )
|
||||||
{
|
{
|
||||||
//
|
/* Go to the beginning */
|
||||||
// Go to the beginning
|
|
||||||
//
|
|
||||||
MenuInfo->SelectedMenuItem = 0;
|
MenuInfo->SelectedMenuItem = 0;
|
||||||
TuiDrawMenuItem(MenuInfo, Selected);
|
TuiDrawMenuItem(MenuInfo, Selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Select new item and update video buffer */
|
||||||
// Select new item and update video buffer
|
|
||||||
//
|
|
||||||
TuiDrawMenuItem(MenuInfo, MenuInfo->SelectedMenuItem);
|
TuiDrawMenuItem(MenuInfo, MenuInfo->SelectedMenuItem);
|
||||||
VideoCopyOffScreenBufferToVRAM();
|
VideoCopyOffScreenBufferToVRAM();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/* Return the pressed key */
|
||||||
// Return the pressed key
|
|
||||||
//
|
|
||||||
return KeyEvent;
|
return KeyEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue