ReactOS  0.4.15-dev-4874-g57c84dd
minitui.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: FreeLoader
4  * FILE: boot/freeldr/freeldr/ui/minitui.c
5  * PURPOSE: Mini Text UI interface
6  * PROGRAMMERS: Brian Palmer <brianp@sginet.com>
7  * HervĂ© Poussineau
8  */
9 
10 #include <freeldr.h>
11 
12 /* NTLDR or Vista+ BOOTMGR progress-bar style */
13 // #define NTLDR_PROGRESSBAR
14 // #define BTMGR_PROGRESSBAR /* Default style */
15 
16 #ifndef _M_ARM
17 
19 {
20  /* Initialize main TUI */
21  if (!TuiInitialize())
22  return FALSE;
23 
24  /* Override default settings with "Mini" TUI Theme */
25 
26  UiTextColor = TuiTextToColor("Default");
27 
32  UiBackdropFillStyle = ' '; // TuiTextToFillStyle("None");
35  // UiMessageBoxFgColor = COLOR_WHITE;
36  // UiMessageBoxBgColor = COLOR_BLUE;
41  // UiEditBoxTextColor = COLOR_WHITE;
42  // UiEditBoxBgColor = COLOR_BLACK;
43 
44  UiShowTime = FALSE;
45  UiMenuBox = FALSE;
48 
49  // TODO: Have a boolean to show/hide title box?
51 
53  "Seconds until highlighted choice will be started automatically:");
54 
55  return TRUE;
56 }
57 
59 {
60  /* Fill in a black background */
64 
65  /* Update the screen buffer */
67 }
68 
70 {
71  /* Minimal UI doesn't have a status bar */
72 }
73 
74 #endif // _M_ARM
75 
76 /*static*/ VOID
78  _In_ PCSTR ProgressText)
79 {
80  ULONG ProgressBarWidth;
81  CHAR ProgressString[256];
82 
83  /* Make sure the progress bar is enabled */
85 
86  /* Calculate the width of the bar proper */
87  ProgressBarWidth = UiProgressBar.Right - UiProgressBar.Left + 1;
88 
89  /* First make sure the progress bar text fits */
90  RtlStringCbCopyA(ProgressString, sizeof(ProgressString), ProgressText);
91  TuiTruncateStringEllipsis(ProgressString, ProgressBarWidth);
92 
93  /* Clear the text area */
96 #ifdef NTLDR_PROGRESSBAR
98 #else // BTMGR_PROGRESSBAR
99  UiProgressBar.Bottom - 2, // One empty line between text and bar.
100 #endif
102 
103  /* Draw the "Loading..." text */
106 #ifdef NTLDR_PROGRESSBAR
107  UiProgressBar.Bottom - 1,
108 #else // BTMGR_PROGRESSBAR
109  UiProgressBar.Bottom - 2, // One empty line between text and bar.
110 #endif
111  ProgressString, ATTR(UiTextColor, UiMenuBgColor));
112 }
113 
114 /*static*/ VOID
116  _In_ ULONG SubPercentTimes100)
117 {
118  ULONG ProgressBarWidth;
119  ULONG FillCount;
120 
121  /* Make sure the progress bar is enabled */
123 
124  ASSERT(SubPercentTimes100 <= (100 * 100));
125 
126  /* Calculate the width of the bar proper */
127  ProgressBarWidth = UiProgressBar.Right - UiProgressBar.Left + 1;
128 
129  /* Compute fill count */
130  // FillCount = (ProgressBarWidth * Position) / Range;
131  FillCount = ProgressBarWidth * SubPercentTimes100 / (100 * 100);
132 
133  /* Fill the progress bar */
134  /* Draw the percent complete -- Use the fill character */
135  if (FillCount > 0)
136  {
138  UiProgressBar.Left + FillCount - 1, UiProgressBar.Bottom,
139  '\xDB', ATTR(UiTextColor, UiMenuBgColor));
140  }
141  /* Fill the remaining with blanks */
145 
146 #ifndef _M_ARM
149 #endif
150 }
151 
152 VOID
154  _In_ PCSTR ProgressText)
155 {
156  ULONG Left, Top, Right, Bottom, Width, Height;
157 
158  /* Build the coordinates and sizes */
159 #ifdef NTLDR_PROGRESSBAR
160  Height = 2;
162  Left = 0;
163  Top = UiScreenHeight - Height - 2;
164 #else // BTMGR_PROGRESSBAR
165  Height = 3;
166  Width = UiScreenWidth - 4;
167  Left = 2;
168  Top = UiScreenHeight - Height - 3;
169 #endif
170  Right = Left + Width - 1;
171  Bottom = Top + Height - 1;
172 
173  /* Draw the progress bar */
174  MiniTuiDrawProgressBar(Left, Top, Right, Bottom, ProgressText);
175 }
176 
177 VOID
179  _In_ ULONG Left,
180  _In_ ULONG Top,
181  _In_ ULONG Right,
182  _In_ ULONG Bottom,
183  _In_ PCSTR ProgressText)
184 {
185  UiInitProgressBar(Left, Top, Right, Bottom, ProgressText);
186 }
187 
188 VOID
191 {
192  ULONG i;
193 
194 #ifndef _M_ARM
195  /* Draw the backdrop */
196  UiDrawBackdrop();
197 #endif
198 
199  /* No GUI status bar text, just minimal text. Show the menu header. */
200  if (MenuInfo->MenuHeader)
201  {
202  UiVtbl.DrawText(0,
203  MenuInfo->Top - 2,
204  MenuInfo->MenuHeader,
206  }
207 
208  /* Draw the menu box */
210 
211  /* Draw each line of the menu */
212  for (i = 0; i < MenuInfo->MenuItemCount; ++i)
213  {
215  }
216 
217  /* Now tell the user how to choose */
218  UiVtbl.DrawText(0,
219  MenuInfo->Bottom + 1,
220  "Use \x18 and \x19 to move the highlight to your choice.",
222  UiVtbl.DrawText(0,
223  MenuInfo->Bottom + 2,
224  "Press ENTER to choose.",
226 
227  /* And show the menu footer */
228  if (MenuInfo->MenuFooter)
229  {
230  UiVtbl.DrawText(0,
231  UiScreenHeight - 4,
232  MenuInfo->MenuFooter,
234  }
235 
236  /* Display the boot options if needed */
237  if (MenuInfo->ShowBootOptions)
238  {
240  }
241 
242 #ifndef _M_ARM
244 #endif
245 }
246 
247 #ifndef _M_ARM
248 
250 {
254  TuiFillArea,
256  TuiDrawBox,
257  TuiDrawText,
258  TuiDrawText2,
268  TuiEditBox,
271  MiniTuiDrawBackdrop, /* no FadeIn */
272  TuiFadeOut,
275 };
276 
277 #endif // _M_ARM
VOID TuiDrawText(_In_ ULONG X, _In_ ULONG Y, _In_ PCSTR Text, _In_ UCHAR Attr)
Definition: tui.c:72
UCHAR TuiTextToColor(PCSTR ColorText)
Definition: tui.c:865
UCHAR UiTextColor
Definition: ui.c:38
VOID TuiMessageBoxCritical(PCSTR MessageText)
Definition: tui.c:659
#define COLOR_BLACK
Definition: ui.h:319
VOID MiniTuiDrawProgressBar(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ PCSTR ProgressText)
Definition: minitui.c:178
CHAR UiTitleBoxTitleText[260]
Definition: ui.c:49
VOID(* DrawText)(ULONG X, ULONG Y, PCSTR Text, UCHAR Attr)
Definition: ui.h:254
#define TRUE
Definition: types.h:120
VOID MiniTuiSetProgressBarText(_In_ PCSTR ProgressText)
Definition: minitui.c:77
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:124
VOID TuiUpdateDateTime(VOID)
Definition: tui.c:552
char CHAR
Definition: xmlstorage.h:175
VOID TuiMessageBox(PCSTR MessageText)
Definition: tui.c:642
BOOLEAN TuiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG Length)
Definition: tui.c:984
ULONG UiScreenHeight
Definition: ui.c:57
_In_ HFONT _Out_ PUINT Height
Definition: font.h:124
VOID TuiDrawBox(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ UCHAR VertStyle, _In_ UCHAR HorzStyle, _In_ BOOLEAN Fill, _In_ BOOLEAN Shadow, _In_ UCHAR Attr)
Definition: tui.c:507
VOID UiInitProgressBar(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ PCSTR ProgressText)
Definition: ui.c:392
UCHAR UiTitleBoxBgColor
Definition: ui.c:33
VOID VideoCopyOffScreenBufferToVRAM(VOID)
Definition: video.c:39
BOOLEAN UiCenterMenu
Definition: ui.c:46
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
Definition: ntstrsafe.h:156
ULONG Right
Definition: ui.h:126
UIVTBL UiVtbl
Definition: ui.c:70
#define FALSE
Definition: types.h:117
#define ANSI_NULL
VOID TuiDrawText2(_In_ ULONG X, _In_ ULONG Y, _In_opt_ ULONG MaxNumChars, _In_reads_or_z_(MaxNumChars) PCSTR Text, _In_ UCHAR Attr)
Definition: tui.c:89
VOID TuiDrawShadow(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom)
Definition: tui.c:362
#define ATTR(cFore, cBack)
Definition: ui.h:314
unsigned char BOOLEAN
#define _In_
Definition: ms_sal.h:308
ULONG Top
Definition: ui.h:125
#define ASSERT(a)
Definition: mode.c:44
BOOLEAN UiMenuBox
Definition: ui.c:45
VOID TuiUnInitialize(VOID)
Definition: tui.c:252
VOID TuiDrawMenuItem(_In_ PUI_MENU_INFO MenuInfo, _In_ ULONG MenuItemNumber)
Definition: tuimenu.c:426
VOID TuiDrawCenteredText(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ PCSTR TextString, _In_ UCHAR Attr)
Definition: tui.c:119
VOID MiniTuiDrawProgressBarCenter(_In_ PCSTR ProgressText)
Definition: minitui.c:153
BOOLEAN Show
Definition: ui.h:129
UCHAR UiBackdropFillStyle
Definition: ui.c:31
UCHAR UiStatusBarBgColor
Definition: ui.c:28
VOID MiniTuiDrawMenu(_In_ PUI_MENU_INFO MenuInfo)
Definition: minitui.c:189
UCHAR UiMenuBgColor
Definition: ui.c:37
VOID MiniTuiDrawBackdrop(VOID)
Definition: minitui.c:58
UCHAR UiTitleBoxFgColor
Definition: ui.c:32
BOOLEAN UiUseSpecialEffects
Definition: ui.c:47
ULONG Bottom
Definition: ui.h:127
BOOLEAN TuiInitialize(VOID)
Definition: tui.c:206
#define COLOR_WHITE
Definition: ui.h:335
Definition: ui.h:245
VOID UiDrawBackdrop(VOID)
Definition: ui.c:239
menu info structure
Definition: window.h:275
UCHAR UiBackdropBgColor
Definition: ui.c:30
UCHAR TuiTextToFillStyle(PCSTR FillStyleText)
Definition: tui.c:904
const UIVTBL MiniTuiVtbl
Definition: minitui.c:249
BOOLEAN MiniTuiInitialize(VOID)
Definition: minitui.c:18
VOID TuiFadeOut(VOID)
Definition: tui.c:954
BOOLEAN TuiDisplayMenu(IN PCSTR MenuHeader, IN PCSTR MenuFooter OPTIONAL, IN BOOLEAN ShowBootOptions, IN PCSTR MenuItemList[], IN ULONG MenuItemCount, IN ULONG DefaultMenuItem, IN LONG MenuTimeOut, OUT PULONG SelectedMenuItem, IN BOOLEAN CanEscape, IN UiMenuKeyPressFilterCallback KeyPressFilter OPTIONAL, IN PVOID Context OPTIONAL)
Definition: tuimenu.c:30
VOID MiniTuiTickProgressBar(_In_ ULONG SubPercentTimes100)
Definition: minitui.c:115
static LPHIST_ENTRY Bottom
Definition: history.c:54
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
UCHAR UiSelectedTextBgColor
Definition: ui.c:40
VOID TuiDrawMenuBox(_In_ PUI_MENU_INFO MenuInfo)
Definition: tuimenu.c:400
VOID TuiTruncateStringEllipsis(_Inout_z_ PSTR StringText, _In_ ULONG MaxChars)
Definition: tui.c:57
ULONG Left
Definition: ui.h:124
VOID TuiFillArea(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, CHAR FillChar, UCHAR Attr)
Definition: tui.c:332
VOID DisplayBootTimeOptions(VOID)
Definition: options.c:181
unsigned int ULONG
Definition: retypes.h:1
UCHAR UiBackdropFgColor
Definition: ui.c:29
UCHAR UiMenuFgColor
Definition: ui.c:36
const char * PCSTR
Definition: typedefs.h:52
CHAR UiTimeText[260]
Definition: ui.c:50
ULONG UiScreenWidth
Definition: ui.c:56
static LPHIST_ENTRY Top
Definition: history.c:53
UI_PROGRESS_BAR UiProgressBar
Definition: ui.c:66
VOID MiniTuiDrawStatusText(PCSTR StatusText)
Definition: minitui.c:69
UCHAR UiStatusBarFgColor
Definition: ui.c:27
UCHAR UiSelectedTextColor
Definition: ui.c:39
BOOLEAN UiShowTime
Definition: ui.c:44