Commit d0112aa5 authored by Alexandre Julliard's avatar Alexandre Julliard

Authors: Mark Westcott <mark@houseoffish.org>, Mike Hearn <mike@theoretic.com>

- Merge drive code from Mark. - Rename saveX11DrvDlgSettings to fetchX11DrvDlgSettings. - Make the listbox display drive title, not letter.
parent 3db78b8d
......@@ -101,6 +101,93 @@ BEGIN
LTEXT "Load order:",IDC_STATIC,16,144,37,8
END
IDD_SYSTEMCFG DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "Drives",IDC_STATIC,8,4,244,120
LISTBOX IDC_LIST_DRIVES,15,23,179,90,WS_VSCROLL
PUSHBUTTON "&Add",IDC_DRIVE_ADD,197,22,50,22
PUSHBUTTON "&Remove",IDC_DRIVE_REMOVE,197,51,50,22
PUSHBUTTON "&Edit",IDC_DRIVE_EDIT,197,80,50,22
END
IDD_DRIVE_EDIT DIALOG DISCARDABLE 0, 0, 207, 110
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Drive Configuration"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",ID_DRIVE_OK,150,7,50,14
PUSHBUTTON "Cancel",ID_DRIVE_CANCEL,150,24,50,14
EDITTEXT IDC_DRIVE_EDIT_NAME,42,8,78,13,ES_AUTOHSCROLL
LTEXT "Drive:",-1,11,10,29,12
EDITTEXT IDC_DRIVE_EDIT_LABEL,42,23,78,13,ES_AUTOHSCROLL
LTEXT "Label:",-1,11,25,29,12
EDITTEXT IDC_DRIVE_EDIT_TYPE,42,38,78,13,ES_AUTOHSCROLL
LTEXT "Type:",-1,11,40,29,12
EDITTEXT IDC_DRIVE_EDIT_PATH,42,53,78,13,ES_AUTOHSCROLL
LTEXT "Path:",-1,11,55,29,12
EDITTEXT IDC_DRIVE_EDIT_FS,42,68,78,13,ES_AUTOHSCROLL
LTEXT "FS:",-1,11,70,29,12
EDITTEXT IDC_DRIVE_EDIT_DEVICE,42,83,78,13,ES_AUTOHSCROLL
LTEXT "Device:",-1,11,85,29,12
END
IDD_DRIVECFG DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "Windows Drive",IDC_STATIC,7,7,246,99
CONTROL "Create a virtual Windows drive",IDC_RADIO_VIRTUAL,
"Button",BS_AUTORADIOBUTTON,14,18,112,10
EDITTEXT IDC_EDIT_VIRTUAL,25,30,169,14,ES_AUTOHSCROLL
PUSHBUTTON "Browse...",IDC_BUTTON_VIRTUAL,202,30,44,14
CONTROL "Use a real Windows drive",IDC_RADIO_REAL,"Button",
BS_AUTORADIOBUTTON,14,48,97,10
EDITTEXT IDC_EDIT_REAL,25,60,169,14,ES_AUTOHSCROLL
PUSHBUTTON "Browse...",IDC_BUTTON_REAL,202,60,44,14
PUSHBUTTON "Important Folders...",IDC_BUTTON_FOLDERS,173,85,73,14
GROUPBOX "Other Drives",IDC_STATIC,7,107,246,112
LISTBOX IDC_LIST_DRIVES,14,118,232,76,LBS_SORT | LBS_NOINTEGRALHEIGHT |
LBS_MULTICOLUMN | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Add...",IDC_BUTTON_ADD,14,199,37,14
PUSHBUTTON "Remove",IDC_BUTTON_REMOVE,55,199,37,14
PUSHBUTTON "Edit...",IDC_BUTTON_EDIT,97,199,37,14
PUSHBUTTON "Autodetect...",IDC_BUTTON_AUTODETECT,197,199,49,14
END
IDD_DRIVE_EDIT2 DIALOG DISCARDABLE 0, 0, 272, 153
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Drive Configuration"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",ID_BUTTON_OK,217,5,50,14
PUSHBUTTON "Cancel",ID_BUTTON_CANCEL,217,22,50,14
LTEXT "Letter:",IDC_STATIC,5,23,26,9
EDITTEXT IDC_EDIT_LABEL,63,114,78,13,ES_AUTOHSCROLL
LTEXT "Label:",IDC_STATIC_LABEL,33,117,29,12
LTEXT "Type:",IDC_STATIC,5,54,21,10
EDITTEXT IDC_EDIT_PATH,31,5,117,13,ES_AUTOHSCROLL
LTEXT "Path:",IDC_STATIC,5,9,20,9
LTEXT "Names:",IDC_STATIC,5,39,25,9
EDITTEXT IDC_EDIT_SERIAL,63,129,78,13,ES_AUTOHSCROLL
LTEXT "Serial:",IDC_STATIC_SERIAL,33,133,29,12
COMBOBOX IDC_COMBO_LETTER,31,20,78,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Browse...",IDC_BUTTON_BROWSE_PATH,154,5,40,13
COMBOBOX IDC_COMBO_NAMES,31,36,78,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBO_TYPE,31,52,78,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
CONTROL "Autodetect from Device:",IDC_RADIO_AUTODETECT,"Button",
BS_AUTORADIOBUTTON,21,79,93,10
EDITTEXT IDC_EDIT_DEVICE,33,89,108,13,ES_AUTOHSCROLL
PUSHBUTTON "Browse...",IDC_BUTTON_BROWSE_DEVICE,148,89,40,13
CONTROL "Manually Assign:",IDC_RADIO_ASSIGN,"Button",
BS_AUTORADIOBUTTON,21,104,69,10
GROUPBOX "Label and Serial Number",IDC_BOX_CDROM,15,68,180,79
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_WINE_VERSION "CVS"
......
......@@ -7,6 +7,7 @@ APPMODE = gui
IMPORTS = comctl32 user32 advapi32
C_SRCS = \
drive.c \
main.c \
properties.c \
winecfg.c \
......
......@@ -160,7 +160,7 @@ AppDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
return FALSE;
}
#define NUM_PROPERTY_PAGES 4
#define NUM_PROPERTY_PAGES 5
INT_PTR
doPropertySheet (HINSTANCE hInstance, HWND hOwner)
{
......@@ -219,6 +219,15 @@ doPropertySheet (HINSTANCE hInstance, HWND hOwner)
psp[3].pszTitle = "X11 Driver";
psp[3].lParam = 0;
psp[4].dwSize = sizeof (PROPSHEETPAGE);
psp[4].dwFlags = PSP_USETITLE;
psp[4].hInstance = hInstance;
psp[4].u.pszTemplate = MAKEINTRESOURCE (IDD_DRIVECFG);
psp[4].u2.pszIcon = NULL;
psp[4].pfnDlgProc = DriveDlgProc;
psp[4].pszTitle = "Drives";
psp[4].lParam = 0;
/*
* Fill out the PROPSHEETHEADER
*/
......
......@@ -3,6 +3,7 @@
*
* Copyright 2002 Jaco Greeff
* Copyright 2003 Dimitrie O. Paun
* Copyright 2003 Mark Westcott
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
......@@ -52,6 +53,18 @@ typedef struct
HDPA DLLs;
} APP_DESC;
typedef struct
{
char szName[MAX_NAME_LENGTH];
char szPath[MAX_NAME_LENGTH];
char szType[MAX_NAME_LENGTH];
char szFS[MAX_NAME_LENGTH];
char szLabel[MAX_NAME_LENGTH];
char szDevice[MAX_NAME_LENGTH];
char szSerial[MAX_NAME_LENGTH];
} DRIVE_DESC;
typedef struct
{
char szX11Display[MAX_NAME_LENGTH];
......
......@@ -3,6 +3,7 @@
*
* Copyright 2002 Jaco Greeff
* Copyright 2003 Dimitrie O. Paun
* Copyright 2003 Mark Westcott
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
......@@ -31,6 +32,11 @@
#define IDD_APPCFG 108
#define IDD_X11DRVCFG 109
#define IDD_DLLCFG 110
#define IDD_DRIVECFG 111
#define IDD_SYSTEMCFG 112
#define IDD_DRIVE_EDIT 113
#define IDD_DRIVE_EDIT2 114
#define IDB_WINE_LOGO 200
#define IDC_TABABOUT 1001
#define IDC_APPLYBTN 1002
#define IDC_WINEVER 1011
......@@ -51,3 +57,47 @@
#define IDC_RAD_BUILTIN 1029
#define IDC_RAD_NATIVE 1030
#define IDC_LIST_DLLS 1031
#define IDC_LIST_BUILTIN_DLLS 1031
#define IDC_LIST_NATIVE_DLLS 1032
#define IDC_RADIO_DEFAULT_BUILTIN 1033
#define IDC_RADIO_DEFAULT_NATIVE 1034
#define IDC_RADIO_VIRTUAL 1035
#define IDC_EDIT_VIRTUAL 1036
#define IDC_BUTTON_VIRTUAL 1037
#define IDC_RADIO_REAL 1038
#define IDC_EDIT_REAL 1039
#define IDC_BUTTON_REAL 1040
#define IDC_BUTTON_FOLDERS 1041
#define IDC_LIST_DRIVES 1042
#define IDC_BUTTON_ADD 1043
#define IDC_BUTTON_REMOVE 1044
#define IDC_BUTTON_EDIT 1045
#define IDC_BUTTON7 1046
#define IDC_BUTTON_AUTODETECT 1046
#define IDC_DRIVE_ADD 1047
#define IDC_DRIVE_REMOVE 1048
#define IDC_DRIVE_EDIT 1049
#define IDC_DRIVE_EDIT_NAME 1050
#define IDC_DRIVE_EDIT_LABEL 1051
#define IDC_DRIVE_EDIT_TYPE 1052
#define IDC_DRIVE_EDIT_FS 1053
#define IDC_DRIVE_EDIT_PATH 1054
#define IDC_DRIVE_EDIT_DEVICE 1055
#define ID_DRIVE_OK 1056
#define ID_DRIVE_CANCEL 1057
#define ID_BUTTON_CANCEL 1058
#define ID_BUTTON_OK 1059
#define IDC_EDIT_LABEL 1060
#define IDC_EDIT_PATH 1061
#define IDC_EDIT_SERIAL 1062
#define IDC_COMBO_LETTER 1063
#define IDC_COMBO_NAMES 1064
#define IDC_COMBO_TYPE 1065
#define IDC_EDIT_DEVICE 1066
#define IDC_BUTTON_BROWSE_PATH 1067
#define IDC_RADIO_AUTODETECT 1068
#define IDC_RADIO_ASSIGN 1069
#define IDC_BUTTON_BROWSE_DEVICE 1070
#define IDC_BOX_CDROM 1071
#define IDC_STATIC_SERIAL 1072
#define IDC_STATIC_LABEL 1073
......@@ -191,7 +191,8 @@ int loadConfig (WINECFG_DESC* pCfg)
{
const DLL_DESC *pDllDefaults;
char buffer[MAX_PATH];
DWORD res;
char subKeyName[51];
DWORD res, i, sizeOfSubKeyName = 50;
WINE_TRACE("\n");
......@@ -265,7 +266,100 @@ int loadConfig (WINECFG_DESC* pCfg)
pCfg->sX11Drv.nDXGrab = 0;
pCfg->sX11Drv.nDoubleBuffered = 0;
pCfg->sX11Drv.nSynchronous = 1;
/*
* Drive mappings
*/
pCfg->pDrives = DPA_Create(26);
for (i = 0;
RegEnumKeyExA(configKey, i, subKeyName, &sizeOfSubKeyName, NULL, NULL, NULL, NULL ) != ERROR_NO_MORE_ITEMS;
++i, sizeOfSubKeyName=50) {
HKEY hkDrive;
DWORD returnType;
char returnBuffer[MAX_NAME_LENGTH];
DWORD sizeOfReturnBuffer = sizeof(returnBuffer);
LONG r;
if (!strncmp("Drive ", subKeyName, 5)) {
DRIVE_DESC *pDrive = malloc(sizeof(DRIVE_DESC));
WINE_TRACE("Loading %s\n", subKeyName);
ZeroMemory(pDrive, sizeof(*pDrive));
sizeOfReturnBuffer = sizeof(returnBuffer);
if (RegOpenKeyExA (configKey, subKeyName, 0, KEY_READ, &hkDrive) != ERROR_SUCCESS) {
WINE_ERR("unable to open drive registry key");
RegCloseKey(configKey);
return 1;
}
strncpy(pDrive->szName, &subKeyName[strlen(subKeyName)-1],1);
if(pDrive->szName) {
pDrive->szName[0] = toupper(pDrive->szName[0]);
}
ZeroMemory(returnBuffer, sizeof(*returnBuffer));
sizeOfReturnBuffer = sizeof(returnBuffer);
r = RegQueryValueExA(hkDrive, "Label", NULL, &returnType, returnBuffer, &sizeOfReturnBuffer);
if (r == ERROR_SUCCESS) {
strncpy(pDrive->szLabel, returnBuffer, sizeOfReturnBuffer);
} else {
WINE_WARN("pDrive->szLabel not loaded: %ld\n", r);
}
ZeroMemory(returnBuffer, sizeof(*returnBuffer));
sizeOfReturnBuffer = sizeof(returnBuffer);
r = RegQueryValueExA(hkDrive, "Serial", NULL, &returnType, returnBuffer, &sizeOfReturnBuffer);
if (r == ERROR_SUCCESS) {
strncpy(pDrive->szSerial, returnBuffer, sizeOfReturnBuffer);
} else {
WINE_WARN("pDrive->szSerial not loaded: %ld\n", r);
}
ZeroMemory(returnBuffer, sizeof(*returnBuffer));
sizeOfReturnBuffer = sizeof(returnBuffer);
r = RegQueryValueExA(hkDrive, "Type", NULL, &returnType, returnBuffer, &sizeOfReturnBuffer);
if (r == ERROR_SUCCESS) {
strncpy(pDrive->szType, returnBuffer, sizeOfReturnBuffer);
} else {
WINE_WARN("pDrive->szType not loaded: %ld", r);
}
ZeroMemory(returnBuffer, sizeof(*returnBuffer));
sizeOfReturnBuffer = sizeof(returnBuffer);
if (RegQueryValueExA(hkDrive, "Path", NULL, &returnType, returnBuffer, &sizeOfReturnBuffer) == ERROR_SUCCESS) {
strncpy(pDrive->szPath, returnBuffer, sizeOfReturnBuffer);
} else {
WINE_WARN("pDrive->szPath not loaded: %ld\n", GetLastError());
}
ZeroMemory(returnBuffer, sizeof(*returnBuffer));
sizeOfReturnBuffer = sizeof(returnBuffer);
if (RegQueryValueExA(hkDrive, "FileSystem", NULL, &returnType, returnBuffer, &sizeOfReturnBuffer) == ERROR_SUCCESS) {
strncpy(pDrive->szFS, returnBuffer, sizeOfReturnBuffer);
} else {
WINE_WARN("pDrive->szFS not loaded: %ld\n", GetLastError());
}
ZeroMemory(returnBuffer, sizeof(*returnBuffer));
sizeOfReturnBuffer = sizeof(returnBuffer);
if (RegQueryValueExA(hkDrive, "Device", NULL, &returnType, returnBuffer, &sizeOfReturnBuffer) == ERROR_SUCCESS) {
strncpy(pDrive->szDevice, returnBuffer, sizeOfReturnBuffer);
} else {
WINE_WARN("pDrive->szDevice not found: %ld\n", GetLastError());
}
if (DPA_InsertPtr(pCfg->pDrives, pCfg->driveCount, pDrive) == -1)
WINE_ERR("Failed to insert pDrive into DPA\n");
else
pCfg->driveCount++;
}
}
WINE_TRACE("loaded %d drives\n", pCfg->driveCount);
RegCloseKey( configKey );
return 0;
}
......
......@@ -44,8 +44,11 @@ typedef struct structWineCfg
char szGraphDriver[MAX_NAME_LENGTH];
HDPA pDlls;
HDPA pApps;
HDPA pDlls;
HDPA pApps;
HDPA pDrives;
int driveCount;
X11DRV_DESC sX11Drv;
} WINECFG_DESC;
......@@ -61,10 +64,19 @@ int saveConfig(const WINECFG_DESC *pCfg);
int setConfigValue (HKEY hCurrent, char *subkey, char *valueName, const char *value);
int getConfigValue (HKEY hCurrent, char *subkey, char *valueName, char *retVal, int length, char *defaultResult);
/* X11DRV */
void initX11DrvDlg (HWND hDlg);
void saveX11DrvDlgSettings (HWND hDlg);
INT_PTR CALLBACK X11DrvDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
/* Drive management */
void initDriveDlg (HWND hDlg);
void saveDriveSettings (HWND hDlg);
INT_PTR CALLBACK DriveDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK DriveEditDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
#define WINE_KEY_ROOT "Software\\Wine\\Wine\\Config"
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment