mirror of
https://github.com/reactos/reactos.git
synced 2025-05-30 22:49:12 +00:00
[USETUP] Similarly to what was done for GenLists, factor out the UI code from the partition list code.
This will allow to reuse it for the 1st-stage GUI setup too, while using another UI representation. Add also two partition iterator functions: GetNextPartition and GetPrevPartition. svn path=/branches/setup_improvements/; revision=74554
This commit is contained in:
parent
92692eae3d
commit
216f15c675
3 changed files with 208 additions and 170 deletions
|
@ -1419,11 +1419,7 @@ AddDiskToList(
|
|||
|
||||
|
||||
PPARTLIST
|
||||
CreatePartitionList(
|
||||
SHORT Left,
|
||||
SHORT Top,
|
||||
SHORT Right,
|
||||
SHORT Bottom)
|
||||
CreatePartitionList(VOID)
|
||||
{
|
||||
PPARTLIST List;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
|
@ -1442,14 +1438,6 @@ CreatePartitionList(
|
|||
if (List == NULL)
|
||||
return NULL;
|
||||
|
||||
List->Left = Left;
|
||||
List->Top = Top;
|
||||
List->Right = Right;
|
||||
List->Bottom = Bottom;
|
||||
|
||||
List->Line = 0;
|
||||
List->Offset = 0;
|
||||
|
||||
List->CurrentDisk = NULL;
|
||||
List->CurrentPartition = NULL;
|
||||
|
||||
|
@ -1466,10 +1454,11 @@ CreatePartitionList(
|
|||
|
||||
Status = NtQuerySystemInformation(SystemDeviceInformation,
|
||||
&Sdi,
|
||||
sizeof(SYSTEM_DEVICE_INFORMATION),
|
||||
sizeof(Sdi),
|
||||
&ReturnSize);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtQuerySystemInformation() failed, Status 0x%08lx", Status);
|
||||
RtlFreeHeap(ProcessHeap, 0, List);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1593,23 +1582,47 @@ DestroyPartitionList(
|
|||
}
|
||||
|
||||
|
||||
VOID
|
||||
InitPartitionListUi(
|
||||
IN OUT PPARTLIST_UI ListUi,
|
||||
IN PPARTLIST List,
|
||||
IN SHORT Left,
|
||||
IN SHORT Top,
|
||||
IN SHORT Right,
|
||||
IN SHORT Bottom)
|
||||
{
|
||||
ListUi->List = List;
|
||||
// ListUi->FirstShown = NULL;
|
||||
// ListUi->LastShown = NULL;
|
||||
|
||||
ListUi->Left = Left;
|
||||
ListUi->Top = Top;
|
||||
ListUi->Right = Right;
|
||||
ListUi->Bottom = Bottom;
|
||||
|
||||
ListUi->Line = 0;
|
||||
ListUi->Offset = 0;
|
||||
|
||||
// ListUi->Redraw = TRUE;
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
PrintEmptyLine(
|
||||
IN PPARTLIST List)
|
||||
IN PPARTLIST_UI ListUi)
|
||||
{
|
||||
COORD coPos;
|
||||
ULONG Written;
|
||||
USHORT Width;
|
||||
USHORT Height;
|
||||
|
||||
Width = List->Right - List->Left - 1;
|
||||
Height = List->Bottom - List->Top - 2;
|
||||
Width = ListUi->Right - ListUi->Left - 1;
|
||||
Height = ListUi->Bottom - ListUi->Top - 2;
|
||||
|
||||
coPos.X = List->Left + 1;
|
||||
coPos.Y = List->Top + 1 + List->Line;
|
||||
coPos.X = ListUi->Left + 1;
|
||||
coPos.Y = ListUi->Top + 1 + ListUi->Line;
|
||||
|
||||
if (List->Line >= 0 && List->Line <= Height)
|
||||
if (ListUi->Line >= 0 && ListUi->Line <= Height)
|
||||
{
|
||||
FillConsoleOutputAttribute(StdOutput,
|
||||
FOREGROUND_WHITE | BACKGROUND_BLUE,
|
||||
|
@ -1624,17 +1637,18 @@ PrintEmptyLine(
|
|||
&Written);
|
||||
}
|
||||
|
||||
List->Line++;
|
||||
ListUi->Line++;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
PrintPartitionData(
|
||||
IN PPARTLIST List,
|
||||
IN PPARTLIST_UI ListUi,
|
||||
IN PDISKENTRY DiskEntry,
|
||||
IN PPARTENTRY PartEntry)
|
||||
{
|
||||
PPARTLIST List = ListUi->List;
|
||||
CHAR LineBuffer[128];
|
||||
COORD coPos;
|
||||
ULONG Written;
|
||||
|
@ -1644,14 +1658,13 @@ PrintPartitionData(
|
|||
PCHAR Unit;
|
||||
UCHAR Attribute;
|
||||
CHAR PartTypeString[32];
|
||||
PCHAR PartType;
|
||||
PartType = PartTypeString;
|
||||
PCHAR PartType = PartTypeString;
|
||||
|
||||
Width = List->Right - List->Left - 1;
|
||||
Height = List->Bottom - List->Top - 2;
|
||||
Width = ListUi->Right - ListUi->Left - 1;
|
||||
Height = ListUi->Bottom - ListUi->Top - 2;
|
||||
|
||||
coPos.X = List->Left + 1;
|
||||
coPos.Y = List->Top + 1 + List->Line;
|
||||
coPos.X = ListUi->Left + 1;
|
||||
coPos.Y = ListUi->Top + 1 + ListUi->Line;
|
||||
|
||||
if (PartEntry->IsPartitioned == FALSE)
|
||||
{
|
||||
|
@ -1751,7 +1764,7 @@ PrintPartitionData(
|
|||
FOREGROUND_BLUE | BACKGROUND_WHITE :
|
||||
FOREGROUND_WHITE | BACKGROUND_BLUE;
|
||||
|
||||
if (List->Line >= 0 && List->Line <= Height)
|
||||
if (ListUi->Line >= 0 && ListUi->Line <= Height)
|
||||
{
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
' ',
|
||||
|
@ -1761,7 +1774,7 @@ PrintPartitionData(
|
|||
}
|
||||
coPos.X += 4;
|
||||
Width -= 8;
|
||||
if (List->Line >= 0 && List->Line <= Height)
|
||||
if (ListUi->Line >= 0 && ListUi->Line <= Height)
|
||||
{
|
||||
FillConsoleOutputAttribute(StdOutput,
|
||||
Attribute,
|
||||
|
@ -1771,7 +1784,7 @@ PrintPartitionData(
|
|||
}
|
||||
coPos.X++;
|
||||
Width -= 2;
|
||||
if (List->Line >= 0 && List->Line <= Height)
|
||||
if (ListUi->Line >= 0 && ListUi->Line <= Height)
|
||||
{
|
||||
WriteConsoleOutputCharacterA(StdOutput,
|
||||
LineBuffer,
|
||||
|
@ -1780,16 +1793,17 @@ PrintPartitionData(
|
|||
&Written);
|
||||
}
|
||||
|
||||
List->Line++;
|
||||
ListUi->Line++;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
PrintDiskData(
|
||||
IN PPARTLIST List,
|
||||
IN PPARTLIST_UI ListUi,
|
||||
IN PDISKENTRY DiskEntry)
|
||||
{
|
||||
// PPARTLIST List = ListUi->List;
|
||||
PPARTENTRY PrimaryPartEntry, LogicalPartEntry;
|
||||
PLIST_ENTRY PrimaryEntry, LogicalEntry;
|
||||
CHAR LineBuffer[128];
|
||||
|
@ -1800,11 +1814,11 @@ PrintDiskData(
|
|||
ULARGE_INTEGER DiskSize;
|
||||
PCHAR Unit;
|
||||
|
||||
Width = List->Right - List->Left - 1;
|
||||
Height = List->Bottom - List->Top - 2;
|
||||
Width = ListUi->Right - ListUi->Left - 1;
|
||||
Height = ListUi->Bottom - ListUi->Top - 2;
|
||||
|
||||
coPos.X = List->Left + 1;
|
||||
coPos.Y = List->Top + 1 + List->Line;
|
||||
coPos.X = ListUi->Left + 1;
|
||||
coPos.Y = ListUi->Top + 1 + ListUi->Line;
|
||||
|
||||
DiskSize.QuadPart = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
|
||||
if (DiskSize.QuadPart >= 10737418240) /* 10 GB */
|
||||
|
@ -1844,7 +1858,7 @@ PrintDiskData(
|
|||
DiskEntry->Id);
|
||||
}
|
||||
|
||||
if (List->Line >= 0 && List->Line <= Height)
|
||||
if (ListUi->Line >= 0 && ListUi->Line <= Height)
|
||||
{
|
||||
FillConsoleOutputAttribute(StdOutput,
|
||||
FOREGROUND_WHITE | BACKGROUND_BLUE,
|
||||
|
@ -1860,7 +1874,7 @@ PrintDiskData(
|
|||
}
|
||||
|
||||
coPos.X++;
|
||||
if (List->Line >= 0 && List->Line <= Height)
|
||||
if (ListUi->Line >= 0 && ListUi->Line <= Height)
|
||||
{
|
||||
WriteConsoleOutputCharacterA(StdOutput,
|
||||
LineBuffer,
|
||||
|
@ -1869,10 +1883,10 @@ PrintDiskData(
|
|||
&Written);
|
||||
}
|
||||
|
||||
List->Line++;
|
||||
ListUi->Line++;
|
||||
|
||||
/* Print separator line */
|
||||
PrintEmptyLine(List);
|
||||
PrintEmptyLine(ListUi);
|
||||
|
||||
/* Print partition lines */
|
||||
PrimaryEntry = DiskEntry->PrimaryPartListHead.Flink;
|
||||
|
@ -1880,7 +1894,7 @@ PrintDiskData(
|
|||
{
|
||||
PrimaryPartEntry = CONTAINING_RECORD(PrimaryEntry, PARTENTRY, ListEntry);
|
||||
|
||||
PrintPartitionData(List,
|
||||
PrintPartitionData(ListUi,
|
||||
DiskEntry,
|
||||
PrimaryPartEntry);
|
||||
|
||||
|
@ -1891,7 +1905,7 @@ PrintDiskData(
|
|||
{
|
||||
LogicalPartEntry = CONTAINING_RECORD(LogicalEntry, PARTENTRY, ListEntry);
|
||||
|
||||
PrintPartitionData(List,
|
||||
PrintPartitionData(ListUi,
|
||||
DiskEntry,
|
||||
LogicalPartEntry);
|
||||
|
||||
|
@ -1903,14 +1917,15 @@ PrintDiskData(
|
|||
}
|
||||
|
||||
/* Print separator line */
|
||||
PrintEmptyLine(List);
|
||||
PrintEmptyLine(ListUi);
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
DrawPartitionList(
|
||||
IN PPARTLIST List)
|
||||
IN PPARTLIST_UI ListUi)
|
||||
{
|
||||
PPARTLIST List = ListUi->List;
|
||||
PLIST_ENTRY Entry, Entry2;
|
||||
PDISKENTRY DiskEntry;
|
||||
PPARTENTRY PartEntry = NULL;
|
||||
|
@ -2001,37 +2016,37 @@ DrawPartitionList(
|
|||
}
|
||||
|
||||
/* If it possible, make the disk name visible */
|
||||
if (CurrentPartLine < List->Offset)
|
||||
if (CurrentPartLine < ListUi->Offset)
|
||||
{
|
||||
List->Offset = CurrentPartLine;
|
||||
ListUi->Offset = CurrentPartLine;
|
||||
}
|
||||
else if (CurrentPartLine - List->Offset > List->Bottom - List->Top - 2)
|
||||
else if (CurrentPartLine - ListUi->Offset > ListUi->Bottom - ListUi->Top - 2)
|
||||
{
|
||||
List->Offset = CurrentPartLine - (List->Bottom - List->Top - 2);
|
||||
ListUi->Offset = CurrentPartLine - (ListUi->Bottom - ListUi->Top - 2);
|
||||
}
|
||||
|
||||
if (CurrentDiskLine < List->Offset && CurrentPartLine - CurrentDiskLine < List->Bottom - List->Top - 2)
|
||||
if (CurrentDiskLine < ListUi->Offset && CurrentPartLine - CurrentDiskLine < ListUi->Bottom - ListUi->Top - 2)
|
||||
{
|
||||
List->Offset = CurrentDiskLine;
|
||||
ListUi->Offset = CurrentDiskLine;
|
||||
}
|
||||
|
||||
/* draw upper left corner */
|
||||
coPos.X = List->Left;
|
||||
coPos.Y = List->Top;
|
||||
/* Draw upper left corner */
|
||||
coPos.X = ListUi->Left;
|
||||
coPos.Y = ListUi->Top;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xDA, // '+',
|
||||
1,
|
||||
coPos,
|
||||
&Written);
|
||||
|
||||
/* draw upper edge */
|
||||
coPos.X = List->Left + 1;
|
||||
coPos.Y = List->Top;
|
||||
if (List->Offset == 0)
|
||||
/* Draw upper edge */
|
||||
coPos.X = ListUi->Left + 1;
|
||||
coPos.Y = ListUi->Top;
|
||||
if (ListUi->Offset == 0)
|
||||
{
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xC4, // '-',
|
||||
List->Right - List->Left - 1,
|
||||
ListUi->Right - ListUi->Left - 1,
|
||||
coPos,
|
||||
&Written);
|
||||
}
|
||||
|
@ -2039,16 +2054,16 @@ DrawPartitionList(
|
|||
{
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xC4, // '-',
|
||||
List->Right - List->Left - 5,
|
||||
ListUi->Right - ListUi->Left - 5,
|
||||
coPos,
|
||||
&Written);
|
||||
coPos.X = List->Right - 5;
|
||||
coPos.X = ListUi->Right - 5;
|
||||
WriteConsoleOutputCharacterA(StdOutput,
|
||||
"(\x18)", // "(up)"
|
||||
3,
|
||||
coPos,
|
||||
&Written);
|
||||
coPos.X = List->Right - 2;
|
||||
coPos.X = ListUi->Right - 2;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xC4, // '-',
|
||||
2,
|
||||
|
@ -2056,19 +2071,19 @@ DrawPartitionList(
|
|||
&Written);
|
||||
}
|
||||
|
||||
/* draw upper right corner */
|
||||
coPos.X = List->Right;
|
||||
coPos.Y = List->Top;
|
||||
/* Draw upper right corner */
|
||||
coPos.X = ListUi->Right;
|
||||
coPos.Y = ListUi->Top;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xBF, // '+',
|
||||
1,
|
||||
coPos,
|
||||
&Written);
|
||||
|
||||
/* draw left and right edge */
|
||||
for (i = List->Top + 1; i < List->Bottom; i++)
|
||||
/* Draw left and right edge */
|
||||
for (i = ListUi->Top + 1; i < ListUi->Bottom; i++)
|
||||
{
|
||||
coPos.X = List->Left;
|
||||
coPos.X = ListUi->Left;
|
||||
coPos.Y = i;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xB3, // '|',
|
||||
|
@ -2076,7 +2091,7 @@ DrawPartitionList(
|
|||
coPos,
|
||||
&Written);
|
||||
|
||||
coPos.X = List->Right;
|
||||
coPos.X = ListUi->Right;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xB3, //'|',
|
||||
1,
|
||||
|
@ -2084,23 +2099,23 @@ DrawPartitionList(
|
|||
&Written);
|
||||
}
|
||||
|
||||
/* draw lower left corner */
|
||||
coPos.X = List->Left;
|
||||
coPos.Y = List->Bottom;
|
||||
/* Draw lower left corner */
|
||||
coPos.X = ListUi->Left;
|
||||
coPos.Y = ListUi->Bottom;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xC0, // '+',
|
||||
1,
|
||||
coPos,
|
||||
&Written);
|
||||
|
||||
/* draw lower edge */
|
||||
coPos.X = List->Left + 1;
|
||||
coPos.Y = List->Bottom;
|
||||
if (LastLine - List->Offset <= List->Bottom - List->Top - 2)
|
||||
/* Draw lower edge */
|
||||
coPos.X = ListUi->Left + 1;
|
||||
coPos.Y = ListUi->Bottom;
|
||||
if (LastLine - ListUi->Offset <= ListUi->Bottom - ListUi->Top - 2)
|
||||
{
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xC4, // '-',
|
||||
List->Right - List->Left - 1,
|
||||
ListUi->Right - ListUi->Left - 1,
|
||||
coPos,
|
||||
&Written);
|
||||
}
|
||||
|
@ -2108,16 +2123,16 @@ DrawPartitionList(
|
|||
{
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xC4, // '-',
|
||||
List->Right - List->Left - 5,
|
||||
ListUi->Right - ListUi->Left - 5,
|
||||
coPos,
|
||||
&Written);
|
||||
coPos.X = List->Right - 5;
|
||||
coPos.X = ListUi->Right - 5;
|
||||
WriteConsoleOutputCharacterA(StdOutput,
|
||||
"(\x19)", // "(down)"
|
||||
3,
|
||||
coPos,
|
||||
&Written);
|
||||
coPos.X = List->Right - 2;
|
||||
coPos.X = ListUi->Right - 2;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xC4, // '-',
|
||||
2,
|
||||
|
@ -2125,9 +2140,9 @@ DrawPartitionList(
|
|||
&Written);
|
||||
}
|
||||
|
||||
/* draw lower right corner */
|
||||
coPos.X = List->Right;
|
||||
coPos.Y = List->Bottom;
|
||||
/* Draw lower right corner */
|
||||
coPos.X = ListUi->Right;
|
||||
coPos.Y = ListUi->Bottom;
|
||||
FillConsoleOutputCharacterA(StdOutput,
|
||||
0xD9, // '+',
|
||||
1,
|
||||
|
@ -2135,7 +2150,7 @@ DrawPartitionList(
|
|||
&Written);
|
||||
|
||||
/* print list entries */
|
||||
List->Line = - List->Offset;
|
||||
ListUi->Line = - ListUi->Offset;
|
||||
|
||||
Entry = List->DiskListHead.Flink;
|
||||
while (Entry != &List->DiskListHead)
|
||||
|
@ -2143,8 +2158,7 @@ DrawPartitionList(
|
|||
DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
|
||||
|
||||
/* Print disk entry */
|
||||
PrintDiskData(List,
|
||||
DiskEntry);
|
||||
PrintDiskData(ListUi, DiskEntry);
|
||||
|
||||
Entry = Entry->Flink;
|
||||
}
|
||||
|
@ -2159,8 +2173,7 @@ SelectPartition(
|
|||
{
|
||||
PDISKENTRY DiskEntry;
|
||||
PPARTENTRY PartEntry;
|
||||
PLIST_ENTRY Entry1;
|
||||
PLIST_ENTRY Entry2;
|
||||
PLIST_ENTRY Entry1, Entry2;
|
||||
|
||||
/* Check for empty disks */
|
||||
if (IsListEmpty(&List->DiskListHead))
|
||||
|
@ -2181,10 +2194,9 @@ SelectPartition(
|
|||
|
||||
if (PartEntry->PartitionNumber == PartitionNumber)
|
||||
{
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
DrawPartitionList(List);
|
||||
return TRUE;
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Entry2 = Entry2->Flink;
|
||||
|
@ -2200,8 +2212,8 @@ SelectPartition(
|
|||
}
|
||||
|
||||
|
||||
BOOL
|
||||
ScrollDownPartitionList(
|
||||
PPARTENTRY
|
||||
GetNextPartition(
|
||||
IN PPARTLIST List)
|
||||
{
|
||||
PLIST_ENTRY DiskListEntry;
|
||||
|
@ -2211,7 +2223,7 @@ ScrollDownPartitionList(
|
|||
|
||||
/* Fail, if no disks are available */
|
||||
if (IsListEmpty(&List->DiskListHead))
|
||||
return FALSE;
|
||||
return NULL;
|
||||
|
||||
/* Check for next usable entry on current disk */
|
||||
if (List->CurrentPartition != NULL)
|
||||
|
@ -2227,7 +2239,7 @@ ScrollDownPartitionList(
|
|||
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
|
||||
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2237,7 +2249,7 @@ ScrollDownPartitionList(
|
|||
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
|
||||
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2255,7 +2267,7 @@ ScrollDownPartitionList(
|
|||
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
|
||||
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2267,7 +2279,7 @@ ScrollDownPartitionList(
|
|||
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
|
||||
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2286,18 +2298,17 @@ ScrollDownPartitionList(
|
|||
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
|
||||
DiskListEntry = DiskListEntry->Flink;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
ScrollUpPartitionList(
|
||||
PPARTENTRY
|
||||
GetPrevPartition(
|
||||
IN PPARTLIST List)
|
||||
{
|
||||
PLIST_ENTRY DiskListEntry;
|
||||
|
@ -2307,7 +2318,7 @@ ScrollUpPartitionList(
|
|||
|
||||
/* Fail, if no disks are available */
|
||||
if (IsListEmpty(&List->DiskListHead))
|
||||
return FALSE;
|
||||
return NULL;
|
||||
|
||||
/* Check for previous usable entry on current disk */
|
||||
if (List->CurrentPartition != NULL)
|
||||
|
@ -2323,12 +2334,12 @@ ScrollUpPartitionList(
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Extended partition*/
|
||||
/* Extended partition */
|
||||
PartEntry = List->CurrentDisk->ExtendedPartition;
|
||||
}
|
||||
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2347,9 +2358,8 @@ ScrollUpPartitionList(
|
|||
}
|
||||
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2374,21 +2384,39 @@ ScrollUpPartitionList(
|
|||
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
return TRUE;
|
||||
return List->CurrentPartition;
|
||||
}
|
||||
}
|
||||
|
||||
DiskListEntry = DiskListEntry->Blink;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
ScrollDownPartitionList(
|
||||
IN PPARTLIST_UI ListUi)
|
||||
{
|
||||
if (GetNextPartition(ListUi->List))
|
||||
DrawPartitionList(ListUi);
|
||||
}
|
||||
|
||||
VOID
|
||||
ScrollUpPartitionList(
|
||||
IN PPARTLIST_UI ListUi)
|
||||
{
|
||||
if (GetPrevPartition(ListUi->List))
|
||||
DrawPartitionList(ListUi);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -150,16 +150,9 @@ typedef struct _DISKENTRY
|
|||
|
||||
typedef struct _PARTLIST
|
||||
{
|
||||
/* UI stuff */
|
||||
SHORT Left;
|
||||
SHORT Top;
|
||||
SHORT Right;
|
||||
SHORT Bottom;
|
||||
|
||||
SHORT Line;
|
||||
SHORT Offset;
|
||||
|
||||
/*
|
||||
* Disk & Partition iterators.
|
||||
*
|
||||
* NOTE that when CurrentPartition != NULL, then CurrentPartition->DiskEntry
|
||||
* must be the same as CurrentDisk. We should however keep the two members
|
||||
* separated as we can have a current (selected) disk without any current
|
||||
|
@ -237,32 +230,24 @@ GetPartTypeStringFromPartitionType(
|
|||
IN ULONG cchPartType);
|
||||
|
||||
PPARTLIST
|
||||
CreatePartitionList(
|
||||
SHORT Left,
|
||||
SHORT Top,
|
||||
SHORT Right,
|
||||
SHORT Bottom);
|
||||
CreatePartitionList(VOID);
|
||||
|
||||
VOID
|
||||
DestroyPartitionList(
|
||||
IN PPARTLIST List);
|
||||
|
||||
VOID
|
||||
DrawPartitionList(
|
||||
IN PPARTLIST List);
|
||||
|
||||
ULONG
|
||||
SelectPartition(
|
||||
IN PPARTLIST List,
|
||||
IN ULONG DiskNumber,
|
||||
IN ULONG PartitionNumber);
|
||||
|
||||
BOOL
|
||||
ScrollDownPartitionList(
|
||||
PPARTENTRY
|
||||
GetNextPartition(
|
||||
IN PPARTLIST List);
|
||||
|
||||
BOOL
|
||||
ScrollUpPartitionList(
|
||||
PPARTENTRY
|
||||
GetPrevPartition(
|
||||
IN PPARTLIST List);
|
||||
|
||||
VOID
|
||||
|
@ -328,4 +313,47 @@ GetNextUncheckedPartition(
|
|||
OUT PDISKENTRY *pDiskEntry OPTIONAL,
|
||||
OUT PPARTENTRY *pPartEntry);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct _PARTLIST_UI
|
||||
{
|
||||
PPARTLIST List;
|
||||
|
||||
// PLIST_ENTRY FirstShown;
|
||||
// PLIST_ENTRY LastShown;
|
||||
|
||||
SHORT Left;
|
||||
SHORT Top;
|
||||
SHORT Right;
|
||||
SHORT Bottom;
|
||||
|
||||
SHORT Line;
|
||||
SHORT Offset;
|
||||
|
||||
// BOOL Redraw;
|
||||
} PARTLIST_UI, *PPARTLIST_UI;
|
||||
|
||||
VOID
|
||||
InitPartitionListUi(
|
||||
IN OUT PPARTLIST_UI ListUi,
|
||||
IN PPARTLIST List,
|
||||
IN SHORT Left,
|
||||
IN SHORT Top,
|
||||
IN SHORT Right,
|
||||
IN SHORT Bottom);
|
||||
|
||||
VOID
|
||||
ScrollDownPartitionList(
|
||||
IN PPARTLIST_UI ListUi);
|
||||
|
||||
VOID
|
||||
ScrollUpPartitionList(
|
||||
IN PPARTLIST_UI ListUi);
|
||||
|
||||
VOID
|
||||
DrawPartitionList(
|
||||
IN PPARTLIST_UI ListUi);
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -790,39 +790,16 @@ LanguagePage(PINPUT_RECORD Ir)
|
|||
static PAGE_NUMBER
|
||||
SetupStartPage(PINPUT_RECORD Ir)
|
||||
{
|
||||
//SYSTEM_DEVICE_INFORMATION Sdi;
|
||||
NTSTATUS Status;
|
||||
WCHAR FileNameBuffer[MAX_PATH];
|
||||
INFCONTEXT Context;
|
||||
PWCHAR Value;
|
||||
UINT ErrorLine;
|
||||
//ULONG ReturnSize;
|
||||
PGENERIC_LIST_ENTRY ListEntry;
|
||||
INT IntValue;
|
||||
|
||||
CONSOLE_SetStatusText(MUIGetString(STRING_PLEASEWAIT));
|
||||
|
||||
#if 0
|
||||
/* Check whether a harddisk is available */
|
||||
Status = NtQuerySystemInformation(SystemDeviceInformation,
|
||||
&Sdi,
|
||||
sizeof(SYSTEM_DEVICE_INFORMATION),
|
||||
&ReturnSize);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
CONSOLE_PrintTextXY(6, 15, "NtQuerySystemInformation() failed (Status 0x%08lx)", Status);
|
||||
MUIDisplayError(ERROR_DRIVE_INFORMATION, Ir, POPUP_WAIT_ENTER);
|
||||
return QUIT_PAGE;
|
||||
}
|
||||
|
||||
if (Sdi.NumberOfDisks == 0)
|
||||
{
|
||||
MUIDisplayError(ERROR_NO_HDD, Ir, POPUP_WAIT_ENTER);
|
||||
return QUIT_PAGE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Get the source path and source root path */
|
||||
Status = GetSourcePaths(&SourcePath,
|
||||
&SourceRootPath,
|
||||
|
@ -896,7 +873,7 @@ SetupStartPage(PINPUT_RECORD Ir)
|
|||
|
||||
RequiredPartitionDiskSpace = (ULONG)IntValue;
|
||||
|
||||
/* Start PnP thread */
|
||||
/* Start the PnP thread */
|
||||
if (hPnpThread != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
NtResumeThread(hPnpThread, NULL);
|
||||
|
@ -907,8 +884,7 @@ SetupStartPage(PINPUT_RECORD Ir)
|
|||
|
||||
if (IsUnattendedSetup)
|
||||
{
|
||||
//TODO
|
||||
//read options from inf
|
||||
// TODO: Read options from inf
|
||||
ComputerList = CreateComputerTypeList(SetupInf);
|
||||
DisplayList = CreateDisplayDriverList(SetupInf);
|
||||
KeyboardList = CreateKeyboardDriverList(SetupInf);
|
||||
|
@ -993,7 +969,7 @@ IntroPage(PINPUT_RECORD Ir)
|
|||
{
|
||||
return REPAIR_INTRO_PAGE;
|
||||
}
|
||||
else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'L') /* R */
|
||||
else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'L') /* L */
|
||||
{
|
||||
return LICENSE_PAGE;
|
||||
}
|
||||
|
@ -1533,19 +1509,18 @@ IsDiskSizeValid(PPARTENTRY PartEntry)
|
|||
static PAGE_NUMBER
|
||||
SelectPartitionPage(PINPUT_RECORD Ir)
|
||||
{
|
||||
PARTLIST_UI ListUi;
|
||||
ULONG Error;
|
||||
|
||||
MUIDisplayPage(SELECT_PARTITION_PAGE);
|
||||
|
||||
if (PartitionList == NULL)
|
||||
{
|
||||
PartitionList = CreatePartitionList(2,
|
||||
23,
|
||||
xScreen - 3,
|
||||
yScreen - 3);
|
||||
PartitionList = CreatePartitionList();
|
||||
if (PartitionList == NULL)
|
||||
{
|
||||
/* FIXME: show an error dialog */
|
||||
MUIDisplayError(ERROR_DRIVE_INFORMATION, Ir, POPUP_WAIT_ENTER);
|
||||
return QUIT_PAGE;
|
||||
}
|
||||
else if (IsListEmpty(&PartitionList->DiskListHead))
|
||||
|
@ -1555,7 +1530,12 @@ SelectPartitionPage(PINPUT_RECORD Ir)
|
|||
}
|
||||
}
|
||||
|
||||
DrawPartitionList(PartitionList);
|
||||
InitPartitionListUi(&ListUi, PartitionList,
|
||||
2,
|
||||
23,
|
||||
xScreen - 3,
|
||||
yScreen - 3);
|
||||
DrawPartitionList(&ListUi);
|
||||
|
||||
if (IsUnattendedSetup)
|
||||
{
|
||||
|
@ -1576,6 +1556,7 @@ SelectPartitionPage(PINPUT_RECORD Ir)
|
|||
TRUE);
|
||||
}
|
||||
|
||||
// FIXME?? Aren't we going to enter an infinite loop, if this test fails??
|
||||
if (!IsDiskSizeValid(PartitionList->CurrentPartition))
|
||||
{
|
||||
MUIDisplayError(ERROR_INSUFFICIENT_PARTITION_SIZE, Ir, POPUP_WAIT_ANY_KEY,
|
||||
|
@ -1590,6 +1571,9 @@ SelectPartitionPage(PINPUT_RECORD Ir)
|
|||
}
|
||||
else
|
||||
{
|
||||
DrawPartitionList(&ListUi);
|
||||
|
||||
// FIXME?? Aren't we going to enter an infinite loop, if this test fails??
|
||||
if (!IsDiskSizeValid(PartitionList->CurrentPartition))
|
||||
{
|
||||
MUIDisplayError(ERROR_INSUFFICIENT_PARTITION_SIZE, Ir, POPUP_WAIT_ANY_KEY,
|
||||
|
@ -1657,14 +1641,12 @@ SelectPartitionPage(PINPUT_RECORD Ir)
|
|||
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
|
||||
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */
|
||||
{
|
||||
if (ScrollDownPartitionList(PartitionList))
|
||||
DrawPartitionList(PartitionList);
|
||||
ScrollDownPartitionList(&ListUi);
|
||||
}
|
||||
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
|
||||
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */
|
||||
{
|
||||
if (ScrollUpPartitionList(PartitionList))
|
||||
DrawPartitionList(PartitionList);
|
||||
ScrollUpPartitionList(&ListUi);
|
||||
}
|
||||
else if (Ir->Event.KeyEvent.wVirtualKeyCode == VK_RETURN) /* ENTER */
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue