[FREELDR]
[reactos.git] / reactos / boot / freeldr / freeldr / ui / minitui.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: FreeLoader
4 * FILE: freeldr/ui/minitui.c
5 * PURPOSE: Mini Text UI interface
6 * PROGRAMMERS: Brian Palmer <brianp@sginet.com>
7 * Hervé Poussineau
8 */
9 #ifndef _M_ARM
10 #include <freeldr.h>
11
12 VOID MiniTuiDrawBackdrop(VOID)
13 {
14 //
15 // Fill in a black background
16 //
17 TuiFillArea(0, 0, UiScreenWidth - 1, UiScreenHeight - 1, 0, 0);
18
19 //
20 // Update the screen buffer
21 //
22 VideoCopyOffScreenBufferToVRAM();
23 }
24
25 VOID MiniTuiDrawStatusText(PCSTR StatusText)
26 {
27 //
28 // Minimal UI doesn't have a status bar
29 //
30 }
31
32 VOID MiniTuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText)
33 {
34 ULONG Left, Top, Right, Bottom;
35 ULONG Width = 50; // Allow for 50 "bars"
36 ULONG Height = 2;
37
38 Width = 80;
39 Left = 0;
40 Right = Left + Width;
41 Top = UiScreenHeight - Height - 4;
42 Bottom = Top + Height + 1;
43
44 MiniTuiDrawProgressBar(Left, Top, Right, Bottom, Position, Range, ProgressText);
45 }
46
47 VOID MiniTuiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, ULONG Position, ULONG Range, PCHAR ProgressText)
48 {
49 ULONG i;
50 ULONG ProgressBarWidth = (Right - Left) - 4;
51
52 // First make sure the progress bar text fits
53 UiTruncateStringEllipsis(ProgressText, ProgressBarWidth - 4);
54
55 if (Position > Range)
56 {
57 Position = Range;
58 }
59
60 //
61 // Draw the "Loading..." text
62 //
63 TuiDrawCenteredText(Left + 2, Top + 1, Right - 2, Top + 1, ProgressText, ATTR(7, 0));
64
65 // Draw the percent complete
66 for (i=0; i<(Position*ProgressBarWidth)/Range; i++)
67 {
68 TuiDrawText(Left+2+i, Top+2, "\xDB", ATTR(UiTextColor, UiMenuBgColor));
69 }
70
71 TuiUpdateDateTime();
72 VideoCopyOffScreenBufferToVRAM();
73 }
74
75 VOID
76 MiniTuiDrawMenu(PUI_MENU_INFO MenuInfo)
77 {
78 ULONG i;
79
80 //
81 // Draw the backdrop
82 //
83 UiDrawBackdrop();
84
85 //
86 // No GUI status bar text, just minimal text. first to tell the user to
87 // choose.
88 //
89 UiVtbl.DrawText(0,
90 MenuInfo->Top - 2,
91 MenuInfo->MenuTitle,
92 ATTR(UiMenuFgColor, UiMenuBgColor));
93
94 //
95 // Now tell him how to choose
96 //
97 UiVtbl.DrawText(0,
98 MenuInfo->Bottom + 1,
99 "Use \x18 and \x19 to move the highlight to your choice.",
100 ATTR(UiMenuFgColor, UiMenuBgColor));
101 UiVtbl.DrawText(0,
102 MenuInfo->Bottom + 2,
103 "Press ENTER to choose.",
104 ATTR(UiMenuFgColor, UiMenuBgColor));
105
106 //
107 // And offer F8 options
108 //
109 UiVtbl.DrawText(0,
110 UiScreenHeight - 4,
111 "For troubleshooting and advanced startup options for "
112 "ReactOS, press F8.",
113 ATTR(UiMenuFgColor, UiMenuBgColor));
114
115 //
116 // Draw the menu box
117 //
118 TuiDrawMenuBox(MenuInfo);
119
120 //
121 // Draw each line of the menu
122 //
123 for (i = 0; i < MenuInfo->MenuItemCount; i++)
124 {
125 TuiDrawMenuItem(MenuInfo, i);
126 }
127
128 VideoCopyOffScreenBufferToVRAM();
129 }
130
131 const UIVTBL MiniTuiVtbl =
132 {
133 TuiInitialize,
134 TuiUnInitialize,
135 MiniTuiDrawBackdrop,
136 TuiFillArea,
137 TuiDrawShadow,
138 TuiDrawBox,
139 TuiDrawText,
140 TuiDrawCenteredText,
141 MiniTuiDrawStatusText,
142 TuiUpdateDateTime,
143 TuiMessageBox,
144 TuiMessageBoxCritical,
145 MiniTuiDrawProgressBarCenter,
146 MiniTuiDrawProgressBar,
147 TuiEditBox,
148 TuiTextToColor,
149 TuiTextToFillStyle,
150 MiniTuiDrawBackdrop, /* no FadeIn */
151 TuiFadeOut,
152 TuiDisplayMenu,
153 MiniTuiDrawMenu,
154 };
155 #endif