#include "config.h"\r
#include "wine/port.h"\r
#define YDEBUG\r
+#define LARGEINT_PROTOS\r
+#define LargeIntegerDivide RtlLargeIntegerDivide\r
+#define ExtendedIntegerMultiply RtlExtendedIntegerMultiply\r
+#define ConvertUlongToLargeInteger RtlConvertUlongToLargeInteger\r
+#define LargeIntegerSubtract RtlLargeIntegerSubtract\r
#include <string.h>\r
#include <stdarg.h>\r
#include <stdio.h>\r
#include <initguid.h>\r
#include <devguid.h>\r
#include <winioctl.h>\r
+#include <largeint.h>\r
\r
WINE_DEFAULT_DEBUG_CHANNEL(shell);\r
\r
\r
#define DRIVE_PROPERTY_PAGES (3)\r
\r
+\r
+static\r
+LARGE_INTEGER\r
+GetFreeBytesShare(LARGE_INTEGER TotalNumberOfFreeBytes, LARGE_INTEGER TotalNumberOfBytes)\r
+{\r
+ LARGE_INTEGER Temp, Result, Remainder;\r
+\r
+ Temp = LargeIntegerDivide(TotalNumberOfBytes, ConvertUlongToLargeInteger(100), &Remainder);\r
+ if (Temp.QuadPart >= TotalNumberOfFreeBytes.QuadPart)\r
+ {\r
+ Result = ConvertUlongToLargeInteger(1);\r
+ }else\r
+ {\r
+ Result = LargeIntegerDivide(TotalNumberOfFreeBytes, Temp, &Remainder); \r
+ }\r
+\r
+ return Result;\r
+}\r
+\r
+static\r
+void\r
+PaintStaticControls(HWND hwndDlg, LPDRAWITEMSTRUCT drawItem)\r
+{\r
+ HBRUSH hBrush;\r
+\r
+ if (drawItem->CtlID == 14013)\r
+ {\r
+ hBrush = CreateSolidBrush(RGB(0, 0, 255));\r
+ if (hBrush)\r
+ {\r
+ FillRect(drawItem->hDC, &drawItem->rcItem, hBrush);\r
+ DeleteObject((HGDIOBJ)hBrush);\r
+ }\r
+ }else if (drawItem->CtlID == 14014)\r
+ {\r
+ hBrush = CreateSolidBrush(RGB(255, 0, 255));\r
+ if (hBrush)\r
+ {\r
+ FillRect(drawItem->hDC, &drawItem->rcItem, hBrush);\r
+ DeleteObject((HGDIOBJ)hBrush);\r
+ }\r
+ }\r
+ else if (drawItem->CtlID == 14015)\r
+ {\r
+ HBRUSH hBlueBrush;\r
+ HBRUSH hMagBrush;\r
+ RECT rect;\r
+ LONG horzsize;\r
+ LARGE_INTEGER Result;\r
+\r
+ hBlueBrush = CreateSolidBrush(RGB(0, 0, 255));\r
+ hMagBrush = CreateSolidBrush(RGB(255, 0, 255));\r
+ \r
+ Result.QuadPart = GetWindowLongPtr(hwndDlg, DWLP_USER);\r
+\r
+ CopyRect(&rect, &drawItem->rcItem);\r
+ horzsize = rect.right - rect.left;\r
+ Result.QuadPart = (Result.QuadPart * horzsize) / 100;\r
+\r
+ rect.right = rect.left + Result.QuadPart;\r
+ FillRect(drawItem->hDC, &rect, hMagBrush);\r
+ rect.left = rect.right;\r
+ rect.right = drawItem->rcItem.right;\r
+ FillRect(drawItem->hDC, &rect, hBlueBrush);\r
+ DeleteObject(hBlueBrush);\r
+ DeleteObject(hMagBrush);\r
+ }\r
+}\r
+\r
static\r
void\r
InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)\r
{\r
- WCHAR szVolumeName[MAX_PATH+1] = {0};\r
+ WCHAR szVolumeName[MAX_PATH+1] = {0};\r
DWORD MaxComponentLength = 0;\r
DWORD FileSystemFlags = 0;\r
WCHAR FileSystemName[MAX_PATH+1] = {0};\r
+ WCHAR szFormat[50];\r
+ WCHAR szBuffer[128];\r
BOOL ret;\r
UINT DriveType;\r
ULARGE_INTEGER FreeBytesAvailable;\r
- ULARGE_INTEGER TotalNumberOfBytes;\r
- ULARGE_INTEGER TotalNumberOfFreeBytes;\r
+ LARGE_INTEGER TotalNumberOfFreeBytes;\r
+ LARGE_INTEGER TotalNumberOfBytes;\r
\r
ret = GetVolumeInformationW(szDrive, szVolumeName, MAX_PATH+1, NULL, &MaxComponentLength, &FileSystemFlags, FileSystemName, MAX_PATH+1);\r
if (ret)\r
DriveType = GetDriveTypeW(szDrive);\r
if (DriveType == DRIVE_FIXED)\r
{\r
- if(GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes))\r
+\r
+ if(GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable, (PULARGE_INTEGER)&TotalNumberOfBytes, (PULARGE_INTEGER)&TotalNumberOfFreeBytes))\r
{\r
WCHAR szResult[128];\r
+ LARGE_INTEGER Result;\r
+#ifdef IOCTL_DISK_GET_LENGTH_INFO_IMPLEMENTED\r
HANDLE hVolume;\r
DWORD BytesReturned = 0;\r
- GET_LENGTH_INFORMATION LengthInformation;\r
- if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))\r
- SendDlgItemMessageW(hwndDlg, 14004, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);\r
\r
- if (StrFormatByteSizeW(FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))\r
- SendDlgItemMessageW(hwndDlg, 14006, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);\r
-#if 0\r
sprintfW(szResult, L"\\\\.\\%c:", towupper(szDrive[0]));\r
hVolume = CreateFileW(szResult, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);\r
if (hVolume != INVALID_HANDLE_VALUE)\r
{\r
- RtlZeroMemory(&LengthInformation, sizeof(GET_LENGTH_INFORMATION));\r
- ret = DeviceIoControl(hVolume, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, (LPVOID)&LengthInformation, sizeof(GET_LENGTH_INFORMATION), &BytesReturned, NULL);\r
+ ret = DeviceIoControl(hVolume, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, (LPVOID)&TotalNumberOfBytes, sizeof(ULARGE_INTEGER), &BytesReturned, NULL);\r
if (ret && StrFormatByteSizeW(LengthInformation.Length.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))\r
SendDlgItemMessageW(hwndDlg, 14008, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);\r
\r
if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))\r
SendDlgItemMessageW(hwndDlg, 14008, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);\r
#endif\r
+\r
+ if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))\r
+ SendDlgItemMessageW(hwndDlg, 14004, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);\r
+\r
+ if (StrFormatByteSizeW(FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))\r
+ SendDlgItemMessageW(hwndDlg, 14006, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);\r
+\r
+ Result = GetFreeBytesShare(TotalNumberOfFreeBytes, TotalNumberOfBytes);\r
+ /* set free bytes percentage */\r
+ sprintfW(szResult, L"%02d%%", Result.QuadPart);\r
+ SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult);\r
+ /* store free share amount */\r
+ SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)Result.QuadPart);\r
+ /* store used share amount */\r
+ Result = LargeIntegerSubtract(ConvertUlongToLargeInteger(100), Result);\r
+ sprintfW(szResult, L"%02d%%", Result.QuadPart);\r
+ SendDlgItemMessageW(hwndDlg, 14005, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult);\r
+ if (LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))\r
+ SendDlgItemMessageW(hwndDlg, 14002, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer);\r
+\r
}\r
}\r
+ /* set drive description */\r
+ SendDlgItemMessageW(hwndDlg, 14010, WM_GETTEXT, (WPARAM)50, (LPARAM)szFormat);\r
+ sprintfW(szBuffer, szFormat, szDrive);\r
+ SendDlgItemMessageW(hwndDlg, 14010, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szBuffer);\r
}\r
\r
\r
)\r
{\r
LPPROPSHEETPAGEW ppsp;\r
+ LPDRAWITEMSTRUCT drawItem;\r
\r
WCHAR * lpstr;\r
switch(uMsg)\r
\r
lpstr = (WCHAR *)ppsp->lParam;\r
InitializeGeneralDriveDialog(hwndDlg, lpstr);\r
- return TRUE; \r
+ return TRUE; \r
+ case WM_DRAWITEM:\r
+ drawItem = (LPDRAWITEMSTRUCT)lParam;\r
+ if (drawItem->CtlID >= 14013 && drawItem->CtlID <= 14015)\r
+ {\r
+ PaintStaticControls(hwndDlg, drawItem);\r
+ return TRUE;\r
+ }\r
+\r
}\r
\r
\r
//ICON
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Typ:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 40, 55, 100, 10
+ LTEXT "", 14002, 110, 55, 100, 10
+
LTEXT "Dateisystem:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
+ CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Belegter Speicher:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
+ CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Freier Speicher:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
- LTEXT "", 14010, 150, 160, 40, 10
- PUSHBUTTON "Bereinigen", 14011, 190, 145, 50, 15, WS_DISABLED
+ CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
+
+ LTEXT "Laufwerk %s", 14010, 100, 170, 40, 10
+ PUSHBUTTON "Bereinigen", 14011, 180, 175, 50, 15, WS_DISABLED
CHECKBOX "Laufwerk komprimieren, um Speicherplatz zu sparen", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Laufwerk für schnelle Dateisuche indizieren", 14012, 15, 205, 165, 10, WS_DISABLED
+ CHECKBOX "Laufwerk für schnelle Dateisuche indizieren", 14012, 15, 220, 165, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 130
IDS_COMMON_PICTURES "Dokumente\\Eigene Bilder"
IDS_COMMON_VIDEO "Dokumente\\Eigene Videos"
IDS_CDBURN_AREA "Lokale Einstellungen\\Anwendungsdaten\\Microsoft\\CD Burning"
+ IDS_DRIVE_FIXED "Lokaler Datenträger"
+ IDS_DRIVE_CDROM "CD-Laufwerk"
+ IDS_DRIVE_NETWORK "Netzwerklaufwerk"
}