Rename 'General tab' to 'About', move to the last position.

Make applications tab handle global and per-app winver, dosver and
winelook settings, mirroring the Libraries tab.  Code copied from
Robert van Herk's libraries tab.
Move global/app specific function and global to the x11drv tab where
it is currently used.
Add a couple of property helper functions.
Set 3D border around treeview controls.
Removed invalid resources from languages other than En.
This commit is contained in:
Chris Morgan 2004-02-07 01:01:34 +00:00 committed by Alexandre Julliard
parent 950808af3b
commit 2c6ea211f0
12 changed files with 716 additions and 330 deletions

View File

@ -23,24 +23,15 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_GENERALCFG DIALOGEX 0, 0, 260, 250 IDD_ABOUTCFG DIALOGEX 0, 0, 260, 250
STYLE WS_CHILD STYLE WS_CHILD
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
COMBOBOX IDC_WINVER,83,153,158,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DOSVER,83,172,158,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_WINELOOK,83,190,158,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Wine Version:",IDC_STATIC,119,17,45,8 LTEXT "Wine Version:",IDC_STATIC,119,17,45,8
LTEXT "CVS",IDC_WINEVER,169,17,56,8 LTEXT "CVS",IDC_WINEVER,169,17,56,8
LTEXT "Windows Version:",IDC_STATIC,17,155,58,8
LTEXT "Windows Look:",IDC_STATIC,17,193,58,8
LTEXT "DOS Version:",IDC_STATIC,17,173,57,8
CONTROL IDB_WINE,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE | CONTROL IDB_WINE,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
SS_REALSIZEIMAGE | WS_BORDER,15,17,157,111, WS_EX_TRANSPARENT SS_REALSIZEIMAGE | WS_BORDER,15,17,157,111, WS_EX_TRANSPARENT
LTEXT "http://www.winehq.org/",IDC_STATIC,119,31,106,8 LTEXT "http://www.winehq.org/",IDC_STATIC,119,31,106,8
GROUPBOX "Default Behaviour",IDC_STATIC,8,115,244,97
LTEXT "Wine provides the ability for Windows applications to mimic various Windows versions and styles",
IDC_STATIC,15,128,227,20
GROUPBOX "Information",IDC_STATIC,8,4,244,106 GROUPBOX "Information",IDC_STATIC,8,4,244,106
CTEXT "This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.", CTEXT "This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.",
IDC_STATIC,119,44,124,59 IDC_STATIC,119,44,124,59
@ -50,20 +41,18 @@ IDD_APPCFG DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
CONTROL "Configuring global settings",IDC_EDITING_GLOBAL, GROUPBOX "Application Settings",IDC_STATIC, 8,4,244,240
"Button",BS_AUTORADIOBUTTON,8,8,244,10 LTEXT "Wine provides the ability for Windows applications to mimic various Windows versions and styles",
CONTROL "Configuring application specific setttings",IDC_EDITING_APP, IDC_STATIC,15,20,227,20
"Button",BS_AUTORADIOBUTTON,8,18,244,10 CONTROL "Applications",IDC_APP_TREEVIEW,"SysTreeView32",WS_BORDER | WS_TABSTOP | TVS_LINESATROOT | TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_HASBUTTONS, 15,40,142,145
PUSHBUTTON "Add application...",IDC_APP_ADDAPP, 163,40,82,60
PUSHBUTTON "Remove application",IDC_APP_REMOVEAPP, 163,125,82,60
LTEXT "Here you can override the default settings on a per-application basis:", LTEXT "Windows Version:",IDC_STATIC,17,192,58,8
IDC_STATIC,8,35,244,20 LTEXT "DOS Version:",IDC_STATIC,17,211,57,8
LTEXT "Windows Look:",IDC_STATIC,17,229,58,8
LISTBOX IDC_LIST_APPS,8,48,244,176,WS_TABSTOP | WS_VSCROLL COMBOBOX IDC_WINVER,83,190,158,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DOSVER,83,208,158,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Add new application...",IDC_ADD_APPDEFAULT,170,226,82,14 COMBOBOX IDC_WINELOOK,83,226,158,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Remove",IDC_REMOVE_APPDEFAULT,130,226,37,14
END END
IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250 IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250
@ -98,7 +87,7 @@ BEGIN
GROUPBOX "DLL Overrides",IDC_STATIC,8,4,244,240 GROUPBOX "DLL Overrides",IDC_STATIC,8,4,244,240
LTEXT "Libraries can be specified individually to be either builtin or native. A DLL entry specified as ""*"" pertains to all DLLs not specified explicitly.\n\nBe careful, wrong settings here have the potential to pretty much kill your setup." LTEXT "Libraries can be specified individually to be either builtin or native. A DLL entry specified as ""*"" pertains to all DLLs not specified explicitly.\n\nBe careful, wrong settings here have the potential to pretty much kill your setup."
, IDC_STATIC,15,17,228,47 , IDC_STATIC,15,17,228,47
CONTROL "DLL Overrides", IDC_TREE_DLLS, "SysTreeView32", WS_TABSTOP | TVS_LINESATROOT | TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_HASBUTTONS, 15,65,142,172 CONTROL "DLL Overrides", IDC_TREE_DLLS, "SysTreeView32", WS_BORDER | WS_TABSTOP | TVS_LINESATROOT | TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_HASBUTTONS, 15,65,142,172
LTEXT "Load order:",IDC_STATIC,163,65,37,8 LTEXT "Load order:",IDC_STATIC,163,65,37,8
CONTROL "Builtin (Wine)",IDC_RAD_BUILTIN,"Button", BS_AUTORADIOBUTTON | WS_GROUP,163,80,57,10 CONTROL "Builtin (Wine)",IDC_RAD_BUILTIN,"Button", BS_AUTORADIOBUTTON | WS_GROUP,163,80,57,10
CONTROL "Native (Windows)",IDC_RAD_NATIVE,"Button", BS_AUTORADIOBUTTON,163,95,72,10 CONTROL "Native (Windows)",IDC_RAD_NATIVE,"Button", BS_AUTORADIOBUTTON,163,95,72,10

View File

@ -49,11 +49,6 @@ IDD_APPCFG DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
CONTROL "List2",IDC_LIST_APPS,"SysListView32",LVS_LIST |
LVS_NOLABELWRAP | WS_BORDER | WS_TABSTOP,16,39,226,108
GROUPBOX "Configuración específica de aplicaciones",IDC_STATIC,8,4,244,151
LTEXT "Esta configuración le permite sobreponerse a la configuración por defecto de Wine (como está especificada en otras pestañas de configuración) para aplicaciones concretas.",
IDC_STATIC,15,17,228,20
END END
IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250 IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250

View File

@ -48,18 +48,6 @@ IDD_APPCFG DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
CONTROL "Configurações globais",IDC_EDITING_GLOBAL,
"Button",BS_AUTORADIOBUTTON,8,8,244,10
CONTROL "Configurações específicas da aplicação",IDC_EDITING_APP,
"Button",BS_AUTORADIOBUTTON,8,18,244,10
LTEXT "Sobreescreva aqui as configurações padrões para cada aplicação:",
IDC_STATIC,8,35,244,20
LISTBOX IDC_LIST_APPS,8,48,244,176,WS_TABSTOP | WS_VSCROLL
PUSHBUTTON "Adionar nova aplicação...",IDC_ADD_APPDEFAULT,170,226,82,14
PUSHBUTTON "Remover",IDC_REMOVE_APPDEFAULT,130,226,37,14
END END
IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250 IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250

View File

@ -62,11 +62,6 @@ IDD_APPCFG DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
CONTROL "List2",IDC_LIST_APPS,"SysListView32",LVS_LIST |
LVS_NOLABELWRAP | WS_BORDER | WS_TABSTOP,16,39,226,108
GROUPBOX "Специфичные настройки под приложение",IDC_STATIC,8,4,244,151
LTEXT "Эти настройки позволяют переопределять настройки Wine по умолчанию (определённые в других вкладках) для каждого конкретного приложения.",
IDC_STATIC,15,17,228,20
END END
IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250 IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250

View File

@ -49,11 +49,6 @@ IDD_APPCFG DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
CONTROL "List2",IDC_LIST_APPS,"SysListView32",LVS_LIST |
LVS_NOLABELWRAP | WS_BORDER | WS_TABSTOP,16,39,226,108
GROUPBOX "Application Specific Setting",IDC_STATIC,8,4,244,151
LTEXT "These settings allow you to overwrite Wine default settings (as specified in other configuration tabs) on a per-application basis.",
IDC_STATIC,15,17,228,20
END END
IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250 IDD_X11DRVCFG DIALOG DISCARDABLE 0, 0, 260, 250

View File

@ -1,7 +1,8 @@
/* /*
* Application defaults page * WineCfg app settings tabsheet
* *
* Copyright 2003 Mike Hearn * Copyright 2004 Robert van Herk
* Chris Morgan
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@ -19,140 +20,619 @@
* *
*/ */
#include <stdio.h> #define NONAMELESSUNION
#include <windows.h>
#include "winecfg.h" #include <commdlg.h>
#include <windef.h>
#include <winbase.h>
#include <winreg.h>
#include <wine/debug.h> #include <wine/debug.h>
#include <stdio.h>
#include "winecfg.h"
#include "resource.h" #include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(winecfg); WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
int appSettings = EDITING_GLOBAL; /* start by editing global */ typedef struct _APPL
char *currentApp; /* the app we are currently editing, or NULL if editing global */ {
BOOL isGlobal;
char* lpcApplication;
char* lpcVersionSection;
char* lpcWinelookSection;
} APPL, *LPAPPL;
static int needToRefresh = 1; static LPAPPL CreateAppl(BOOL isGlobal, char* application, char* version_section, char* winelook_section)
{
char *getSectionForApp(char *section) { LPAPPL out;
static char *lastResult = NULL; WINE_TRACE("application: '%s', version_section: '%s', winelook_section: '%s'\n", application,
if (lastResult) HeapFree(GetProcessHeap(), 0, lastResult); version_section, winelook_section);
lastResult = HeapAlloc(GetProcessHeap(), 0, strlen("AppDefaults\\") + strlen(currentApp) + 2 /* \\ */ + strlen(section) + 1 /* terminator */); out = HeapAlloc(GetProcessHeap(),0,sizeof(APPL));
sprintf(lastResult, "AppDefaults\\%s\\%s", currentApp, section); out->lpcApplication = strdup(application);
return lastResult; out->lpcVersionSection = strdup(version_section);
out->lpcWinelookSection = strdup(winelook_section);
out->isGlobal = isGlobal;
return out;
} }
static void configureFor(HWND dialog, int mode) { static VOID FreeAppl(LPAPPL lpAppl)
CheckRadioButton(dialog, IDC_EDITING_GLOBAL, IDC_EDITING_APP, mode == EDITING_APP ? IDC_EDITING_APP : IDC_EDITING_GLOBAL); {
if (mode == EDITING_GLOBAL) { /* The strings were strdup-ped, so we use "free" */
disable(IDC_LIST_APPS); if (lpAppl->lpcApplication) free(lpAppl->lpcApplication);
disable(IDC_ADD_APPDEFAULT); if (lpAppl->lpcVersionSection) free(lpAppl->lpcVersionSection);
disable(IDC_REMOVE_APPDEFAULT); if (lpAppl->lpcWinelookSection) free(lpAppl->lpcWinelookSection);
} else { HeapFree(GetProcessHeap(),0,lpAppl);
enable(IDC_LIST_APPS); }
enable(IDC_ADD_APPDEFAULT);
enable(IDC_REMOVE_APPDEFAULT); /* section can be "Version" or "Tweak.Layout" */
/* key can be "Windows"/"Dos"/"WineLook" */
/* value can be appropriate values for the above keys */
typedef struct _APPSETTING
{
char* section;
char* lpcKey;
char* value;
} APPSETTING, *LPAPPSETTING;
static LPAPPSETTING CreateAppSetting(char* lpcKey, char* value)
{
LPAPPSETTING out = HeapAlloc(GetProcessHeap(),0,sizeof(APPSETTING));
out->lpcKey = strdup (lpcKey);
out->value = strdup(value);
return out;
}
static VOID FreeAppSetting(LPAPPSETTING las)
{
if (las->lpcKey) free(las->lpcKey);
if (las->value) free(las->value);
HeapFree(GetProcessHeap(),0,las);
}
typedef struct _ITEMTAG
{
LPAPPL lpAppl;
LPAPPSETTING lpSetting;
} ITEMTAG, *LPITEMTAG;
static LPITEMTAG CreateItemTag()
{
LPITEMTAG out;
out = HeapAlloc(GetProcessHeap(),0,sizeof(ITEMTAG));
out->lpAppl = 0;
out->lpSetting = 0;
return out;
}
static VOID FreeItemTag(LPITEMTAG lpit)
{
/* if child, only free the lpSetting, the lpAppl will be freed when we free the parents item tag */
if (lpit->lpSetting)
{
FreeAppSetting(lpit->lpSetting);
} else
{
if (lpit->lpAppl)
FreeAppl(lpit->lpAppl);
}
HeapFree(GetProcessHeap(), 0, lpit);
}
static VOID LoadAppSettings(LPAPPL appl /*DON'T FREE, treeview will own this*/, HWND hDlg, HWND hwndTV)
{
HKEY key;
int i;
DWORD size;
DWORD readSize;
char name [255];
char read [255];
char *description;
LPITEMTAG lpIt;
TVINSERTSTRUCT tis;
HTREEITEM hParent;
LPAPPSETTING lpas;
WINE_TRACE("opening '%s' and '%s'\n", appl->lpcVersionSection, appl->lpcWinelookSection);
if ((RegOpenKey (configKey, appl->lpcVersionSection, &key) == ERROR_SUCCESS) ||
(RegOpenKey (configKey, appl->lpcWinelookSection, &key) == ERROR_SUCCESS))
{
i = 0;
size = 255;
readSize = 255;
lpIt = CreateItemTag();
lpIt->lpAppl = appl;
tis.hParent = NULL;
tis.hInsertAfter = TVI_LAST;
tis.u.item.mask = TVIF_TEXT | TVIF_PARAM;
tis.u.item.pszText = appl->lpcApplication;
tis.u.item.lParam = (LPARAM)lpIt;
hParent = TreeView_InsertItem(hwndTV,&tis);
tis.hParent = hParent;
/* insert version entries */
if(RegOpenKey (configKey, appl->lpcVersionSection, &key) == ERROR_SUCCESS)
{
while (RegEnumValue(key, i, name, &size, NULL, NULL, read, &readSize) == ERROR_SUCCESS)
{
char itemtext[128];
WINE_TRACE("Reading value %s, namely %s\n", name, read);
lpIt = CreateItemTag();
lpas = CreateAppSetting(name, read);
lpIt->lpSetting = lpas;
lpIt->lpAppl = appl;
tis.u.item.lParam = (LPARAM)lpIt;
/* convert the value for 'dosver or winver' to human readable form */
description = getDescriptionFromVersion(getWinVersions(), read);
if(!description)
{
description = getDescriptionFromVersion(getDOSVersions(), read);
if(!description)
description = "Not found";
}
sprintf(itemtext, "%s - %s", name, description);
tis.u.item.pszText = itemtext;
TreeView_InsertItem(hwndTV,&tis);
i++; size = 255; readSize = 255;
}
RegCloseKey(key);
} else
{
WINE_TRACE("no version section found\n");
}
i = 0; /* reset i to 0 before calling RegEnumValue() again */
/* insert winelook entries */
if(RegOpenKey (configKey, appl->lpcWinelookSection, &key) == ERROR_SUCCESS)
{
while (RegEnumValue(key, i, name, &size, NULL, NULL, read, &readSize) == ERROR_SUCCESS)
{
char itemtext[128];
WINE_TRACE("Reading value %s, namely %s\n", name, read);
lpIt = CreateItemTag();
lpas = CreateAppSetting(name, read);
lpIt->lpSetting = lpas;
lpIt->lpAppl = appl;
tis.u.item.lParam = (LPARAM)lpIt;
/* convert the value for 'winelook' to human readable form */
description = getDescriptionFromVersion(getWinelook(), read);
if(!description) description = "Not found";
sprintf(itemtext, "%s - %s", name, description);
tis.u.item.pszText = itemtext;
TreeView_InsertItem(hwndTV,&tis);
i++; size = 255; readSize = 255;
}
RegCloseKey(key);
} else
{
WINE_TRACE("no winelook section found\n");
}
}
}
static VOID SetEnabledAppControls(HWND dialog)
{
}
static VOID UpdateComboboxes(HWND hDlg, LPAPPL lpAppl)
{
int i;
const VERSION_DESC *pVer = NULL;
/* retrieve the registry values for this application */
char *curWinVer = getConfigValue(lpAppl->lpcVersionSection, "Windows", "");
char *curDOSVer = getConfigValue(lpAppl->lpcVersionSection, "DOS", "");
char *curWineLook = getConfigValue(lpAppl->lpcWinelookSection, "WineLook", "");
if(curWinVer) WINE_TRACE("curWinVer is '%s'\n", curWinVer);
else WINE_TRACE("curWinVer is null\n");
if(curDOSVer) WINE_TRACE("curDOSVer is '%s'\n", curDOSVer);
else WINE_TRACE("curDOSVer is null\n");
if(curWineLook) WINE_TRACE("curWineLook is '%s'\n", curWineLook);
else WINE_TRACE("curWineLook is null\n");
/* normalize the version strings */
if(strlen(curWinVer) != 0)
{
if ((pVer = getWinVersions ()))
{
WINE_TRACE("Windows version\n");
for (i = 0; *pVer->szVersion || *pVer->szDescription; i++, pVer++)
{
WINE_TRACE("pVer->szVersion == %s\n", pVer->szVersion);
if (!strcasecmp (pVer->szVersion, curWinVer))
{
SendDlgItemMessage (hDlg, IDC_WINVER, CB_SETCURSEL,
(WPARAM) i, 0);
WINE_TRACE("match with %s\n", pVer->szVersion);
}
}
} }
appSettings = mode; } else /* clear selection */
} {
WINE_TRACE("setting winver to nothing\n");
SendDlgItemMessage (hDlg, IDC_WINVER, CB_SETCURSEL,
-1, 0);
}
/* fill the dialog with the current appdefault entries */ if(strlen(curDOSVer) != 0)
static void refreshDialog(HWND dialog) { {
HKEY key; if ((pVer = getDOSVersions ()))
char *subKeyName = HeapAlloc(GetProcessHeap(), 0, MAX_NAME_LENGTH); {
DWORD sizeOfSubKeyName = MAX_NAME_LENGTH; WINE_TRACE("DOS version\n");
int i, itemIndex; for (i = 0; *pVer->szVersion || *pVer->szDescription; i++, pVer++)
{
WINE_TRACE("\n"); WINE_TRACE("pVer->szVersion == %s\n", pVer->szVersion);
if (!strcasecmp (pVer->szVersion, curDOSVer))
/* Clear the listbox */ {
SendMessageA(GetDlgItem(dialog, IDC_LIST_APPS), LB_RESETCONTENT, 0, 0); SendDlgItemMessage (hDlg, IDC_DOSVER, CB_SETCURSEL,
(WPARAM) i, 0);
return_if_fail( WINE_TRACE("match with %s\n", pVer->szVersion);
RegCreateKey(HKEY_LOCAL_MACHINE, WINE_KEY_ROOT "\\AppDefaults", &key) == ERROR_SUCCESS }
); }
/* Iterate over each subkey in the AppDefaults tree */
for (i = 0;
RegEnumKeyEx(key, i, subKeyName, &sizeOfSubKeyName, NULL, NULL, NULL, NULL ) != ERROR_NO_MORE_ITEMS;
++i, sizeOfSubKeyName = MAX_NAME_LENGTH) {
WINE_TRACE("appdefault entry=%s\n", subKeyName);
itemIndex = SendMessageA(GetDlgItem(dialog, IDC_LIST_APPS), LB_ADDSTRING ,(WPARAM) -1, (LPARAM) subKeyName);
} }
} else
{
WINE_TRACE("setting dosver to nothing\n");
SendDlgItemMessage (hDlg, IDC_DOSVER, CB_SETCURSEL,
-1, 0);
}
configureFor(dialog, appSettings); if(strlen(curWineLook) != 0)
{
if ((pVer = getWinelook ()))
{
WINE_TRACE("Winelook\n");
WINE_TRACE("done\n"); for (i = 0; *pVer->szVersion || *pVer->szDescription; i++, pVer++)
RegCloseKey(key); {
HeapFree(GetProcessHeap(), 0, subKeyName); WINE_TRACE("pVer->szVersion == %s\n", pVer->szVersion);
if (!strcasecmp (pVer->szVersion, curWineLook))
{
SendDlgItemMessage (hDlg, IDC_WINELOOK, CB_SETCURSEL,
(WPARAM) i, 0);
WINE_TRACE("match with %s\n", pVer->szVersion);
}
}
}
} else
{
WINE_TRACE("setting winelook to nothing\n");
SendDlgItemMessage (hDlg, IDC_WINELOOK, CB_SETCURSEL,
-1, 0);
}
if(curWinVer) free(curWinVer);
if(curDOSVer) free(curDOSVer);
if(curWineLook) free(curWineLook);
} }
static void onAppsListSelChange(HWND dialog) { void
int newPos = SendDlgItemMessage(dialog, IDC_LIST_APPS, LB_GETCURSEL, 0, 0); initAppDlgComboboxes (HWND hDlg)
int appLen = SendDlgItemMessage(dialog, IDC_LIST_APPS, LB_GETTEXTLEN, newPos, 0); {
if (currentApp) HeapFree(GetProcessHeap(), 0, currentApp); int i;
currentApp = HeapAlloc(GetProcessHeap(), 0, appLen+1); const VERSION_DESC *pVer = NULL;
return_if_fail(
SendDlgItemMessage(dialog, IDC_LIST_APPS, LB_GETTEXT, newPos, (LPARAM) currentApp) != LB_ERR if ((pVer = getWinVersions ()))
); {
WINE_TRACE("new selection is %s\n", currentApp); for (i = 0; *pVer->szVersion || *pVer->szDescription; i++, pVer++)
{
SendDlgItemMessage (hDlg, IDC_WINVER, CB_ADDSTRING,
0, (LPARAM) pVer->szDescription);
}
}
if ((pVer = getDOSVersions ()))
{
for (i = 0; *pVer->szVersion || *pVer->szDescription ; i++, pVer++)
{
SendDlgItemMessage (hDlg, IDC_DOSVER, CB_ADDSTRING,
0, (LPARAM) pVer->szDescription);
}
}
if ((pVer = getWinelook ()))
{
for (i = 0; *pVer->szVersion || *pVer->szDescription; i++, pVer++)
{
SendDlgItemMessage (hDlg, IDC_WINELOOK, CB_ADDSTRING,
0, (LPARAM) pVer->szDescription);
}
}
} }
static VOID OnInitAppDlg(HWND hDlg)
{
HWND hwndTV;
LPAPPL lpAppl;
HKEY applKey;
int i;
DWORD size;
char appl [255];
char lpcVersionKey [255];
char lpcWinelookKey [255];
FILETIME ft;
hwndTV = GetDlgItem(hDlg,IDC_APP_TREEVIEW);
lpAppl = CreateAppl(TRUE, "Global Settings", "Version", "Tweak.Layout");
LoadAppSettings(lpAppl, hDlg, hwndTV);
/*And now the application specific stuff:*/
if (RegOpenKey(configKey, "AppDefaults", &applKey) == ERROR_SUCCESS)
{
i = 0;
size = 255;
while (RegEnumKeyEx(applKey, i, appl, &size, NULL, NULL, NULL, &ft) == ERROR_SUCCESS)
{
sprintf(lpcVersionKey, "AppDefaults\\%s\\Version", appl);
sprintf(lpcWinelookKey, "AppDefaults\\%s\\Tweak.Layout", appl);
lpAppl = CreateAppl(FALSE, appl, lpcVersionKey, lpcWinelookKey);
LoadAppSettings(lpAppl, hDlg, hwndTV);
i++; size = 255;
}
RegCloseKey(applKey);
}
SetEnabledAppControls(hDlg);
}
static VOID OnTreeViewChangeItem(HWND hDlg, HWND hTV)
{
TVITEM ti;
LPITEMTAG lpit;
ti.mask = TVIF_PARAM;
ti.hItem = TreeView_GetSelection(hTV);
if (TreeView_GetItem (hTV, &ti))
{
lpit = (LPITEMTAG) ti.lParam;
if (lpit->lpAppl)
{
WINE_TRACE("lpit->lpAppl is non-null\n");
/* update comboboxes to reflect settings for this app */
UpdateComboboxes(hDlg, lpit->lpAppl);
} else
{
WINE_TRACE("lpit->lpAppl is null\n");
}
}
}
static VOID OnTreeViewDeleteItem(NMTREEVIEW* nmt)
{
FreeItemTag((LPITEMTAG)(nmt->itemOld.lParam));
}
static VOID OnAddApplicationClick(HWND hDlg)
{
char szFileTitle [255];
char szFile [255];
char lpcVersionKey [255];
char lpcWinelookKey [255];
TVINSERTSTRUCT tis;
LPITEMTAG lpit;
OPENFILENAME ofn = { sizeof(OPENFILENAME),
0, /*hInst*/0, "Wine Programs (*.exe,*.exe.so)\0*.exe;*.exe.so\0", NULL, 0, 0, NULL,
0, NULL, 0, NULL, NULL,
OFN_SHOWHELP, 0, 0, NULL, 0, NULL };
ofn.lpstrFileTitle = szFileTitle;
ofn.lpstrFileTitle[0] = '\0';
ofn.nMaxFileTitle = sizeof(szFileTitle);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
if (GetOpenFileName(&ofn))
{
tis.hParent = NULL;
tis.hInsertAfter = TVI_LAST;
tis.u.item.mask = TVIF_TEXT | TVIF_PARAM;
tis.u.item.pszText = szFileTitle;
lpit = CreateItemTag();
sprintf(lpcVersionKey, "AppDefaults\\%s\\Version", szFileTitle);
sprintf(lpcWinelookKey, "AppDefaults\\%s\\Tweak.Layout", szFileTitle);
lpit->lpAppl = CreateAppl(FALSE, szFileTitle, lpcVersionKey, lpcWinelookKey);
tis.u.item.lParam = (LPARAM)lpit;
TreeView_InsertItem(GetDlgItem(hDlg, IDC_APP_TREEVIEW), &tis);
/* add the empty entries for the Version and Winelook sections for this app */
setConfigValue(lpcVersionKey,NULL,NULL);
setConfigValue(lpcWinelookKey,NULL,NULL);
}
}
static VOID OnRemoveApplicationClick(HWND hDlg)
{
HWND hTV;
TVITEM ti;
LPITEMTAG lpit;
hTV = GetDlgItem(hDlg, IDC_APP_TREEVIEW);
ti.mask = TVIF_PARAM;
ti.hItem = TreeView_GetSelection(hTV);
if (TreeView_GetItem (hTV, &ti))
{
lpit = (LPITEMTAG) ti.lParam;
if (lpit->lpAppl)
{
/* add transactions to remove all entries for this application */
addTransaction(lpit->lpAppl->lpcVersionSection, NULL, ACTION_REMOVE, NULL);
addTransaction(lpit->lpAppl->lpcWinelookSection, NULL, ACTION_REMOVE, NULL);
TreeView_DeleteItem(hTV,ti.hItem);
}
}
}
static void UpdateWinverSelection(HWND hDlg, int selection)
{
TVITEM ti;
LPITEMTAG lpit;
VERSION_DESC *pVer = NULL;
HWND hTV = GetDlgItem(hDlg, IDC_APP_TREEVIEW);
ti.mask = TVIF_PARAM;
ti.hItem = TreeView_GetSelection(hTV);
if (TreeView_GetItem (hTV, &ti))
{
lpit = (LPITEMTAG) ti.lParam;
if(lpit->lpAppl)
{
pVer = getWinVersions();
/* if no item is selected OR if our version string is null */
/* remove this applications setting */
if((selection == CB_ERR) || !(*pVer[selection].szVersion))
{
WINE_TRACE("removing section '%s'\n", lpit->lpAppl->lpcWinelookSection);
addTransaction(lpit->lpAppl->lpcVersionSection, "Windows", ACTION_REMOVE, NULL); /* change registry entry */
} else
{
WINE_TRACE("setting section '%s', key '%s', value '%s'\n", lpit->lpAppl->lpcVersionSection, "Windows", pVer[selection].szVersion);
addTransaction(lpit->lpAppl->lpcVersionSection, "Windows", ACTION_SET, pVer[selection].szVersion); /* change registry entry */
}
TreeView_DeleteAllItems(hTV); /* delete all items from the treeview */
OnInitAppDlg(hDlg);
}
}
}
static void UpdateDosverSelection(HWND hDlg, int selection)
{
TVITEM ti;
LPITEMTAG lpit;
VERSION_DESC *pVer = NULL;
HWND hTV = GetDlgItem(hDlg, IDC_APP_TREEVIEW);
ti.mask = TVIF_PARAM;
ti.hItem = TreeView_GetSelection(hTV);
if (TreeView_GetItem (hTV, &ti))
{
lpit = (LPITEMTAG) ti.lParam;
if(lpit->lpAppl)
{
pVer = getDOSVersions();
/* if no item is selected OR if our version string is null */
/* remove this applications setting */
if((selection == CB_ERR) || !(*pVer[selection].szVersion))
{
WINE_TRACE("removing section '%s'\n", lpit->lpAppl->lpcWinelookSection);
addTransaction(lpit->lpAppl->lpcVersionSection, "DOS", ACTION_REMOVE, NULL); /* change registry entry */
} else
{
WINE_TRACE("setting section '%s', key '%s', value '%s'\n", lpit->lpAppl->lpcVersionSection, "DOS", pVer[selection].szVersion);
addTransaction(lpit->lpAppl->lpcVersionSection, "DOS", ACTION_SET, pVer[selection].szVersion); /* change registry entry */
}
TreeView_DeleteAllItems(hTV); /* delete all items from the treeview */
OnInitAppDlg(hDlg);
}
}
}
static void UpdateWinelookSelection(HWND hDlg, int selection)
{
TVITEM ti;
LPITEMTAG lpit;
VERSION_DESC *pVer = NULL;
HWND hTV = GetDlgItem(hDlg, IDC_APP_TREEVIEW);
ti.mask = TVIF_PARAM;
ti.hItem = TreeView_GetSelection(hTV);
if (TreeView_GetItem (hTV, &ti))
{
lpit = (LPITEMTAG) ti.lParam;
if(lpit->lpAppl)
{
pVer = getWinelook();
/* if no item is selected OR if our version string is null */
/* remove this applications setting */
if((selection == CB_ERR) || !(*pVer[selection].szVersion))
{
WINE_TRACE("removing section '%s'\n", lpit->lpAppl->lpcWinelookSection);
addTransaction(lpit->lpAppl->lpcWinelookSection, "WineLook", ACTION_REMOVE, NULL); /* change registry entry */
} else
{
WINE_TRACE("setting section '%s', key '%s', value '%s'\n", lpit->lpAppl->lpcWinelookSection, "WineLook", pVer[selection].szVersion);
addTransaction(lpit->lpAppl->lpcWinelookSection, "WineLook", ACTION_SET, pVer[selection].szVersion); /* change registry entry */
}
TreeView_DeleteAllItems(hTV); /* delete all items from the treeview */
OnInitAppDlg(hDlg);
}
}
}
INT_PTR CALLBACK INT_PTR CALLBACK
AppDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) AppDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
switch (uMsg) int selection;
{ switch (uMsg)
case WM_COMMAND: switch (LOWORD(wParam)) { {
case IDC_EDITING_APP: case WM_INITDIALOG:
if (SendDlgItemMessage(hDlg, IDC_LIST_APPS, LB_GETCURSEL, 0, 0) == LB_ERR) { OnInitAppDlg(hDlg);
/* no selection, so select the first one */ initAppDlgComboboxes(hDlg);
SendDlgItemMessage(hDlg, IDC_LIST_APPS, LB_SETCURSEL, 0, 0); break;
onAppsListSelChange(hDlg); case WM_NOTIFY:
} switch (((LPNMHDR)lParam)->code) {
configureFor(hDlg, EDITING_APP); case TVN_SELCHANGED: {
break; switch(LOWORD(wParam)) {
case IDC_EDITING_GLOBAL: case IDC_APP_TREEVIEW:
configureFor(hDlg, EDITING_GLOBAL); OnTreeViewChangeItem(hDlg, GetDlgItem(hDlg,IDC_APP_TREEVIEW));
break;
case IDC_ADD_APPDEFAULT:
WRITEME(hDlg);
refreshDialog(hDlg);
break;
case IDC_REMOVE_APPDEFAULT:
WRITEME(hDlg);
refreshDialog(hDlg);
break;
case IDC_LIST_APPS:
if (HIWORD(wParam) == LBN_SELCHANGE) onAppsListSelChange(hDlg);
break;
}
break; break;
}
case WM_NOTIFY: switch(((LPNMHDR)lParam)->code) {
case PSN_KILLACTIVE:
SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
break;
case PSN_APPLY:
SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
break;
case PSN_SETACTIVE:
if (needToRefresh) {
refreshDialog(hDlg);
needToRefresh = 0;
}
break;
}
break;
case WM_INITDIALOG:
WINE_TRACE("Init appdefaults\n");
break;
} }
return FALSE; break;
case TVN_DELETEITEM:
OnTreeViewDeleteItem ((LPNMTREEVIEW)lParam);
break;
}
break;
case WM_COMMAND:
switch(HIWORD(wParam)) {
case CBN_SELCHANGE:
switch(LOWORD(wParam)) {
case IDC_WINVER:
selection = SendDlgItemMessage( hDlg, IDC_WINVER, CB_GETCURSEL, 0, 0);
UpdateWinverSelection(hDlg, selection);
break;
case IDC_DOSVER:
selection = SendDlgItemMessage( hDlg, IDC_DOSVER, CB_GETCURSEL, 0, 0);
UpdateDosverSelection(hDlg, selection);
break;
case IDC_WINELOOK:
selection = SendDlgItemMessage( hDlg, IDC_WINELOOK, CB_GETCURSEL, 0, 0);
UpdateWinelookSelection(hDlg, selection);
break;
}
case BN_CLICKED:
switch(LOWORD(wParam)) {
case IDC_APP_ADDAPP:
OnAddApplicationClick(hDlg);
break;
case IDC_APP_REMOVEAPP:
OnRemoveApplicationClick(hDlg);
break;
}
break;
}
break;
}
return 0;
} }

View File

@ -36,10 +36,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(winecfg); WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
#define versionSection (appSettings == EDITING_GLOBAL ? "Version" : (getSectionForApp("Version")))
#define tweakSection (appSettings == EDITING_GLOBAL ? "Tweak.Layout" : (getSectionForApp("Tweak.Layout")))
void CALLBACK void CALLBACK
PropSheetCallback (HWND hWnd, UINT uMsg, LPARAM lParam) PropSheetCallback (HWND hWnd, UINT uMsg, LPARAM lParam)
{ {
@ -59,67 +55,8 @@ PropSheetCallback (HWND hWnd, UINT uMsg, LPARAM lParam)
} }
} }
void
initGeneralDlg (HWND hDlg)
{
int i;
const VERSION_DESC *pVer = NULL;
char *curWinVer = getConfigValue(versionSection, "Windows", "win98");
char *curDOSVer = getConfigValue(versionSection, "DOS", "6.22");
char *curWineLook = getConfigValue(tweakSection, "WineLook", "win95");
/* normalize the version strings */
if (!strcmp(curWinVer, "win2000") || !strcmp(curWinVer, "nt2k") || !strcmp(curWinVer, "nt2000")) {
free(curWinVer);
curWinVer = strdup("win2k");
}
if (!strcmp(curWinVer, "win2k3")) {
free(curWinVer);
curWinVer = strdup("win2003");
}
if ((pVer = getWinVersions ()))
{
for (i = 0; *pVer->szVersion; i++, pVer++)
{
SendDlgItemMessage (hDlg, IDC_WINVER, CB_ADDSTRING,
0, (LPARAM) pVer->szDescription);
if (!strcmp (pVer->szVersion, curWinVer))
SendDlgItemMessage (hDlg, IDC_WINVER, CB_SETCURSEL,
(WPARAM) i, 0);
}
}
if ((pVer = getDOSVersions ()))
{
for (i = 0; *pVer->szVersion; i++, pVer++)
{
SendDlgItemMessage (hDlg, IDC_DOSVER, CB_ADDSTRING,
0, (LPARAM) pVer->szDescription);
if (!strcmp (pVer->szVersion, curDOSVer))
SendDlgItemMessage (hDlg, IDC_DOSVER, CB_SETCURSEL,
(WPARAM) i, 0);
}
}
if ((pVer = getWinelook ()))
{
for (i = 0; *pVer->szVersion; i++, pVer++)
{
SendDlgItemMessage (hDlg, IDC_WINELOOK, CB_ADDSTRING,
0, (LPARAM) pVer->szDescription);
if (!strcmp (pVer->szVersion, curWineLook))
SendDlgItemMessage (hDlg, IDC_WINELOOK, CB_SETCURSEL,
(WPARAM) i, 0);
}
}
free(curWinVer);
free(curDOSVer);
free(curWineLook);
}
INT_PTR CALLBACK INT_PTR CALLBACK
GeneralDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) AboutDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
switch (uMsg) { switch (uMsg) {
@ -127,47 +64,9 @@ GeneralDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (((LPNMHDR)lParam)->code != PSN_SETACTIVE) break; if (((LPNMHDR)lParam)->code != PSN_SETACTIVE) break;
/* otherwise fall through, we want to refresh the page as well */ /* otherwise fall through, we want to refresh the page as well */
case WM_INITDIALOG: case WM_INITDIALOG:
initGeneralDlg (hDlg);
break; break;
case WM_COMMAND: case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_WINVER: if (HIWORD(wParam) == CBN_SELCHANGE) {
/* user changed the wine version combobox */
int selection = SendDlgItemMessage( hDlg, IDC_WINVER, CB_GETCURSEL, 0, 0);
VERSION_DESC *desc = getWinVersions();
while (selection > 0) {
desc++; selection--;
}
addTransaction(versionSection, "Windows", ACTION_SET, desc->szVersion);
}
break;
case IDC_WINELOOK: if (HIWORD(wParam) == CBN_SELCHANGE) {
/* user changed the wine look combo box */
int selection = SendDlgItemMessage( hDlg, IDC_WINELOOK, CB_GETCURSEL, 0, 0);
VERSION_DESC *desc = getWinelook();
while (selection > 0) {
desc++; selection--;
}
addTransaction(tweakSection, "WineLook", ACTION_SET, desc->szVersion);
}
break;
case IDC_DOSVER: if (HIWORD(wParam) == CBN_SELCHANGE) {
/* user changed the dos version combo box */
int selection = SendDlgItemMessage( hDlg, IDC_WINELOOK, CB_GETCURSEL, 0, 0);
VERSION_DESC *desc = getDOSVersions();
while (selection > 0) {
desc++; selection--;
}
addTransaction(versionSection, "DOS", ACTION_SET, desc->szVersion);
}
}
break; break;
default: default:
@ -184,77 +83,84 @@ doPropertySheet (HINSTANCE hInstance, HWND hOwner)
{ {
PROPSHEETPAGE psp[NUM_PROPERTY_PAGES]; PROPSHEETPAGE psp[NUM_PROPERTY_PAGES];
PROPSHEETHEADER psh; PROPSHEETHEADER psh;
int pg = 0; /* start with page 0 */
/*
* Fill out the (General) PROPSHEETPAGE data structure
* for the property sheet
*/
psp[0].dwSize = sizeof (PROPSHEETPAGE);
psp[0].dwFlags = PSP_USETITLE;
psp[0].hInstance = hInstance;
psp[0].u.pszTemplate = MAKEINTRESOURCE (IDD_GENERALCFG);
psp[0].u2.pszIcon = NULL;
psp[0].pfnDlgProc = GeneralDlgProc;
psp[0].pszTitle = "General";
psp[0].lParam = 0;
/* /*
* Fill out the (Applications) PROPSHEETPAGE data structure * Fill out the (Applications) PROPSHEETPAGE data structure
* for the property sheet * for the property sheet
*/ */
psp[1].dwSize = sizeof (PROPSHEETPAGE); psp[pg].dwSize = sizeof (PROPSHEETPAGE);
psp[1].dwFlags = PSP_USETITLE; psp[pg].dwFlags = PSP_USETITLE;
psp[1].hInstance = hInstance; psp[pg].hInstance = hInstance;
psp[1].u.pszTemplate = MAKEINTRESOURCE (IDD_APPCFG); psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_APPCFG);
psp[1].u2.pszIcon = NULL; psp[pg].u2.pszIcon = NULL;
psp[1].pfnDlgProc = AppDlgProc; psp[pg].pfnDlgProc = AppDlgProc;
psp[1].pszTitle = "Applications"; psp[pg].pszTitle = "Applications";
psp[1].lParam = 0; psp[pg].lParam = 0;
pg++;
/* /*
* Fill out the (Libraries) PROPSHEETPAGE data structure * Fill out the (Libraries) PROPSHEETPAGE data structure
* for the property sheet * for the property sheet
*/ */
psp[2].dwSize = sizeof (PROPSHEETPAGE); psp[pg].dwSize = sizeof (PROPSHEETPAGE);
psp[2].dwFlags = PSP_USETITLE; psp[pg].dwFlags = PSP_USETITLE;
psp[2].hInstance = hInstance; psp[pg].hInstance = hInstance;
psp[2].u.pszTemplate = MAKEINTRESOURCE (IDD_DLLCFG); psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_DLLCFG);
psp[2].u2.pszIcon = NULL; psp[pg].u2.pszIcon = NULL;
psp[2].pfnDlgProc = LibrariesDlgProc; psp[pg].pfnDlgProc = LibrariesDlgProc;
psp[2].pszTitle = "Libraries"; psp[pg].pszTitle = "Libraries";
psp[2].lParam = 0; psp[pg].lParam = 0;
pg++;
/* /*
* Fill out the (X11Drv) PROPSHEETPAGE data structure * Fill out the (X11Drv) PROPSHEETPAGE data structure
* for the property sheet * for the property sheet
*/ */
psp[3].dwSize = sizeof (PROPSHEETPAGE); psp[pg].dwSize = sizeof (PROPSHEETPAGE);
psp[3].dwFlags = PSP_USETITLE; psp[pg].dwFlags = PSP_USETITLE;
psp[3].hInstance = hInstance; psp[pg].hInstance = hInstance;
psp[3].u.pszTemplate = MAKEINTRESOURCE (IDD_X11DRVCFG); psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_X11DRVCFG);
psp[3].u2.pszIcon = NULL; psp[pg].u2.pszIcon = NULL;
psp[3].pfnDlgProc = X11DrvDlgProc; psp[pg].pfnDlgProc = X11DrvDlgProc;
psp[3].pszTitle = "X11 Driver"; psp[pg].pszTitle = "X11 Driver";
psp[3].lParam = 0; psp[pg].lParam = 0;
pg++;
psp[4].dwSize = sizeof (PROPSHEETPAGE); psp[pg].dwSize = sizeof (PROPSHEETPAGE);
psp[4].dwFlags = PSP_USETITLE; psp[pg].dwFlags = PSP_USETITLE;
psp[4].hInstance = hInstance; psp[pg].hInstance = hInstance;
psp[4].u.pszTemplate = MAKEINTRESOURCE (IDD_DRIVECFG); psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_DRIVECFG);
psp[4].u2.pszIcon = NULL; psp[pg].u2.pszIcon = NULL;
psp[4].pfnDlgProc = DriveDlgProc; psp[pg].pfnDlgProc = DriveDlgProc;
psp[4].pszTitle = "Drives"; psp[pg].pszTitle = "Drives";
psp[4].lParam = 0; psp[pg].lParam = 0;
pg++;
psp[pg].dwSize = sizeof (PROPSHEETPAGE);
psp[pg].dwFlags = PSP_USETITLE;
psp[pg].hInstance = hInstance;
psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_AUDIOCFG);
psp[pg].u2.pszIcon = NULL;
psp[pg].pfnDlgProc = AudioDlgProc;
psp[pg].pszTitle = "Audio";
psp[pg].lParam = 0;
pg++;
/*
* Fill out the (General) PROPSHEETPAGE data structure
* for the property sheet
*/
psp[pg].dwSize = sizeof (PROPSHEETPAGE);
psp[pg].dwFlags = PSP_USETITLE;
psp[pg].hInstance = hInstance;
psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_ABOUTCFG);
psp[pg].u2.pszIcon = NULL;
psp[pg].pfnDlgProc = AboutDlgProc;
psp[pg].pszTitle = "About";
psp[pg].lParam = 0;
pg++;
psp[5].dwSize = sizeof (PROPSHEETPAGE);
psp[5].dwFlags = PSP_USETITLE;
psp[5].hInstance = hInstance;
psp[5].u.pszTemplate = MAKEINTRESOURCE (IDD_AUDIOCFG);
psp[5].u2.pszIcon = NULL;
psp[5].pfnDlgProc = AudioDlgProc;
psp[5].pszTitle = "Audio";
psp[5].lParam = 0;
/* /*
* Fill out the PROPSHEETHEADER * Fill out the PROPSHEETHEADER
*/ */

View File

@ -25,6 +25,7 @@
#include "properties.h" #include "properties.h"
static VERSION_DESC sWinVersions[] = { static VERSION_DESC sWinVersions[] = {
{"", "Use default(Global setting)"},
{"win20", "Windows 2.0"}, {"win20", "Windows 2.0"},
{"win30", "Windows 3.0"}, {"win30", "Windows 3.0"},
{"win31", "Windows 3.1"}, {"win31", "Windows 3.1"},
@ -40,11 +41,13 @@ static VERSION_DESC sWinVersions[] = {
}; };
static VERSION_DESC sDOSVersions[] = { static VERSION_DESC sDOSVersions[] = {
{"", "Use default(Global setting)"},
{"6.22", "MS-DOS 6.22"}, {"6.22", "MS-DOS 6.22"},
{"", ""} {"", ""}
}; };
static VERSION_DESC sWineLook[] = { static VERSION_DESC sWineLook[] = {
{"", "Use default(Global setting)"},
{"win31", "Windows 3.1"}, {"win31", "Windows 3.1"},
{"win95", "Windows 95"}, {"win95", "Windows 95"},
{"win98", "Windows 98"}, {"win98", "Windows 98"},
@ -127,3 +130,27 @@ AUDIO_DRIVER* getAudioDrivers(void)
{ {
return sAudioDrivers; return sAudioDrivers;
} }
/* Functions to convert from version to description and back */
char* getVersionFromDescription(VERSION_DESC* pVer, char *desc)
{
for (; *pVer->szVersion; pVer++)
{
if(!strcasecmp(pVer->szDescription, desc))
return pVer->szVersion;
}
return NULL;
}
char* getDescriptionFromVersion(VERSION_DESC* pVer, char *ver)
{
for (; *pVer->szDescription; pVer++)
{
if(!strcasecmp(pVer->szVersion, ver))
return pVer->szDescription;
}
return NULL;
}

View File

@ -92,5 +92,7 @@ VERSION_DESC *getDOSVersions(void);
VERSION_DESC *getWinelook(void); VERSION_DESC *getWinelook(void);
DLL_DESC *getDLLDefaults(void); DLL_DESC *getDLLDefaults(void);
AUDIO_DRIVER *getAudioDrivers(void); AUDIO_DRIVER *getAudioDrivers(void);
char* getVersionFromDescription(VERSION_DESC *pVer, char *desc);
char* getDescriptionFromVersion(VERSION_DESC *pVer, char *ver);
#endif #endif

View File

@ -28,7 +28,7 @@
#define IDS_TAB_DRIVES 4 #define IDS_TAB_DRIVES 4
#define IDD_MAINDLG 101 #define IDD_MAINDLG 101
#define IDB_WINE 104 #define IDB_WINE 104
#define IDD_GENERALCFG 107 #define IDD_ABOUTCFG 107
#define IDD_APPCFG 108 #define IDD_APPCFG 108
#define IDD_AUDIOCFG 109 #define IDD_AUDIOCFG 109
#define IDD_X11DRVCFG 110 #define IDD_X11DRVCFG 110
@ -116,11 +116,9 @@
#define IDC_DOUBLE_BUFFER 1080 #define IDC_DOUBLE_BUFFER 1080
/* applications tab */ /* applications tab */
#define IDC_LIST_APPS 1021 #define IDC_APP_TREEVIEW 1021
#define IDC_EDITING_GLOBAL 1081 #define IDC_APP_ADDAPP 1081
#define IDC_EDITING_APP 1082 #define IDC_APP_REMOVEAPP 1082
#define IDC_ADD_APPDEFAULT 1083
#define IDC_REMOVE_APPDEFAULT 1084
/* audio tab */ /* audio tab */
#define IDC_AUDIO_AUTODETECT 1085 #define IDC_AUDIO_AUTODETECT 1085

View File

@ -119,7 +119,6 @@ char *getDialogItemText(HWND hDlg, WORD controlID);
#define disable(id) EnableWindow(GetDlgItem(dialog, id), 0); #define disable(id) EnableWindow(GetDlgItem(dialog, id), 0);
#define enable(id) EnableWindow(GetDlgItem(dialog, id), 1); #define enable(id) EnableWindow(GetDlgItem(dialog, id), 1);
#define WINE_KEY_ROOT "Software\\Wine\\Wine\\Config" #define WINE_KEY_ROOT "Software\\Wine\\Wine\\Config"
#endif #endif

View File

@ -39,6 +39,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
int updatingUI; int updatingUI;
int appSettings = EDITING_GLOBAL; /* start by editing global */
char *currentApp; /* the app we are currently editing, or NULL if editing global */
char *getSectionForApp(char *pSection)
{
static char *lastResult = NULL;
if (lastResult) HeapFree(GetProcessHeap(), 0, lastResult);
lastResult = HeapAlloc(GetProcessHeap(), 0, strlen("AppDefaults\\") + strlen(currentApp) + 2 /* \\ */ + strlen(pSection) + 1 /* terminator */);
sprintf(lastResult, "AppDefaults\\%s\\%s", currentApp, pSection);
return lastResult;
}
void updateGUIForDesktopMode(HWND dialog) { void updateGUIForDesktopMode(HWND dialog) {
WINE_TRACE("\n"); WINE_TRACE("\n");