From 5cd0b376e790e77e26a5e1810979cf8a3b50dfd6 Mon Sep 17 00:00:00 2001 From: eccles Date: Thu, 26 Sep 2002 22:47:21 +0000 Subject: [PATCH] Clicking [x] behaves the same as Cancel (thank's brainsucker). Saved 224 bytes. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1197 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/InstallOptions/InstallerOptions.cpp | 122 +++++++++++--------- Plugins/InstallOptions.dll | Bin 11264 -> 11264 bytes 2 files changed, 65 insertions(+), 57 deletions(-) diff --git a/Contrib/InstallOptions/InstallerOptions.cpp b/Contrib/InstallOptions/InstallerOptions.cpp index 9da8b818..d9ad1d2a 100644 --- a/Contrib/InstallOptions/InstallerOptions.cpp +++ b/Contrib/InstallOptions/InstallerOptions.cpp @@ -157,7 +157,8 @@ HWND hConfigWindow = NULL; HWND hMainWindow = NULL; HINSTANCE m_hInstance = NULL; -char *pszTitle = NULL; +char *pszFilename = NULL; +char *pszTitle = NULL; char *pszCancelQuestion = NULL; char *pszCancelQuestionCaption = NULL; char *pszCancelButtonText = NULL; @@ -323,7 +324,7 @@ bool ValidateFields() { return true; } -bool SaveSettings(LPSTR pszFilename) { +bool SaveSettings(void) { static char szField[25]; int nIdx; HWND hwnd; @@ -429,9 +430,23 @@ void AddBrowseButtons() { } } -bool ReadSettings(LPSTR pszFilename) { - int nResult; - static char szResult[1000]; +static char szResult[1000]; + +DWORD WINAPI myGetProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName) +{ + *szResult = '\0'; + return GetPrivateProfileString(lpAppName, lpKeyName, "", szResult, sizeof(szResult), pszFilename); +} + +char * WINAPI myGetProfileStringDup(LPCTSTR lpAppName, LPCTSTR lpKeyName) +{ + if (myGetProfileString(lpAppName, lpKeyName)) + return strdup(szResult); + else + return NULL; +} + +bool ReadSettings(void) { static char szField[25]; int nIdx; // Messagebox icon types @@ -447,23 +462,16 @@ bool ReadSettings(LPSTR pszFilename) { { NULL, 0 } }; - nResult = GetPrivateProfileString("Settings", "Title", "", szResult, sizeof(szResult), pszFilename); - pszTitle = (nResult > 0) ? strdup(szResult) : NULL; + pszTitle = myGetProfileStringDup("Settings", "Title"); + pszCancelQuestion = myGetProfileStringDup("Settings", "CancelConfirm"); + pszCancelQuestionCaption = myGetProfileStringDup("Settings", "CancelConfirmCaption"); + pszCancelButtonText = myGetProfileStringDup("Settings", "CancelButtonText"); + pszNextButtonText = myGetProfileStringDup("Settings", "NextButtonText"); + pszBackButtonText = myGetProfileStringDup("Settings", "BackButtonText"); - nResult = GetPrivateProfileString("Settings", "CancelConfirm", "", szResult, sizeof(szResult), pszFilename); - pszCancelQuestion = (nResult > 0) ? strdup(szResult) : NULL; - nResult = GetPrivateProfileString("Settings", "CancelConfirmCaption", "", szResult, sizeof(szResult), pszFilename); - pszCancelQuestionCaption = (nResult > 0) ? strdup(szResult) : NULL; - nResult = GetPrivateProfileString("Settings", "CancelConfirmIcon", "", szResult, sizeof(szResult), pszFilename); + myGetProfileString("Settings", "CancelConfirmIcon"); nCancelQuestionIcon = LookupToken(IconTable, szResult); - nResult = GetPrivateProfileString("Settings", "CancelButtonText", "", szResult, sizeof(szResult), pszFilename); - pszCancelButtonText = (nResult > 0) ? strdup(szResult) : NULL; - nResult = GetPrivateProfileString("Settings", "NextButtonText", "", szResult, sizeof(szResult), pszFilename); - pszNextButtonText = (nResult > 0) ? strdup(szResult) : NULL; - nResult = GetPrivateProfileString("Settings", "BackButtonText", "", szResult, sizeof(szResult), pszFilename); - pszBackButtonText = (nResult > 0) ? strdup(szResult) : NULL; - nNumFields = GetPrivateProfileInt("Settings", "NumFields", 0, pszFilename); bBackEnabled = GetPrivateProfileInt("Settings", "BackEnabled", 0, pszFilename); @@ -516,8 +524,7 @@ bool ReadSettings(LPSTR pszFilename) { }; wsprintf(szField, "Field %d", nIdx + 1); - *szResult = '\0'; - nResult = GetPrivateProfileString(szField, "TYPE", "", szResult, sizeof(szResult), pszFilename); + myGetProfileString(szField, "TYPE"); // Get the control type pFields[nIdx].nType = LookupToken(TypeTable, szResult); @@ -527,30 +534,27 @@ bool ReadSettings(LPSTR pszFilename) { // Lookup flags associated with the control type pFields[nIdx].nFlags |= LookupToken(FlagTable, szResult); - nResult = GetPrivateProfileString(szField, "TEXT", "", szResult, sizeof(szResult), pszFilename); - if (nResult) { - pFields[nIdx].pszText = STRDUP(szResult); - } - nResult = GetPrivateProfileString(szField, "STATE", "", szResult, sizeof(szResult), pszFilename); + pFields[nIdx].pszText = myGetProfileStringDup(szField, "TEXT"); + + // pszState cannot be NULL (?) + myGetProfileString(szField, "STATE"); pFields[nIdx].pszState = STRDUP(szResult); - nResult = GetPrivateProfileString(szField, "ROOT", "", szResult, sizeof(szResult), pszFilename); - if (nResult) { - pFields[nIdx].pszRoot = STRDUP(szResult); - } + pFields[nIdx].pszRoot = myGetProfileStringDup(szField, "ROOT"); - nResult = GetPrivateProfileString(szField, "ListItems", "", szResult, sizeof(szResult), pszFilename); - if (nResult) { - // add an extra | character to the end to simplify the loop where we add the items. - pFields[nIdx].pszListItems = (char*)MALLOC(nResult + 2); - wsprintf(pFields[nIdx].pszListItems, "%s|", szResult); + { + int nResult = myGetProfileString(szField, "ListItems"); + if (nResult) { + // add an extra | character to the end to simplify the loop where we add the items. + pFields[nIdx].pszListItems = (char*)MALLOC(nResult + 2); + wsprintf(pFields[nIdx].pszListItems, "%s|", szResult); + } } pFields[nIdx].nMaxLength = GetPrivateProfileInt(szField, "MaxLen", 0, pszFilename); pFields[nIdx].nMinLength = GetPrivateProfileInt(szField, "MinLen", 0, pszFilename); - nResult = GetPrivateProfileString(szField, "ValidateText", "", szResult, sizeof(szResult), pszFilename); - if (nResult) { - pFields[nIdx].pszValidateText = STRDUP(szResult); + pFields[nIdx].pszValidateText = myGetProfileStringDup(szField, "ValidateText"); + if (pFields[nIdx].pszValidateText) { // translate backslash-n in the input into actual carriage-return/line-feed characters. for (char *pPos = pFields[nIdx].pszValidateText; *pPos; pPos++) { if (*pPos == '\\') { @@ -567,15 +571,17 @@ bool ReadSettings(LPSTR pszFilename) { } } - nResult = GetPrivateProfileString(szField, "Filter", "All Files|*.*", szResult, sizeof(szResult), pszFilename); - if (nResult) { - // add an extra | character to the end to simplify the loop where we add the items. - pFields[nIdx].pszFilter = (char*)MALLOC(nResult + 2); - strcpy(pFields[nIdx].pszFilter, szResult); - char *pszPos = pFields[nIdx].pszFilter; - while (*pszPos) { - if (*pszPos == '|') *pszPos = '\0'; - pszPos++; + { + int nResult = GetPrivateProfileString(szField, "Filter", "All Files|*.*", szResult, sizeof(szResult), pszFilename); + if (nResult) { + // add an extra | character to the end to simplify the loop where we add the items. + pFields[nIdx].pszFilter = (char*)MALLOC(nResult + 2); + strcpy(pFields[nIdx].pszFilter, szResult); + char *pszPos = pFields[nIdx].pszFilter; + while (*pszPos) { + if (*pszPos == '|') *pszPos = '\0'; + pszPos++; + } } } @@ -584,8 +590,7 @@ bool ReadSettings(LPSTR pszFilename) { pFields[nIdx].rect.top = GetPrivateProfileInt(szField, "TOP", 0, pszFilename); pFields[nIdx].rect.bottom = GetPrivateProfileInt(szField, "BOTTOM", 0, pszFilename); - nResult = GetPrivateProfileString(szField, "Flags", "", szResult, sizeof(szResult), pszFilename); - if (nResult > 0) { + if (myGetProfileString(szField, "Flags")) { // append the | to make parsing a bit easier if (lstrlen(szResult)text[0] || !ReadSettings((*stacktop)->text)) + if (!stacktop || !*stacktop || !(pszFilename = (*stacktop)->text) || !pszFilename[0] || !ReadSettings()) { popstring(NULL); pushstring("error finding config"); @@ -748,8 +757,7 @@ extern "C" void __declspec(dllexport) dialog(HWND hwndParent, int string_size, EnableWindow(GetDlgItem(hMainWindow,IDCANCEL),bCancelEnabled?SW_SHOWNA:SW_HIDE); // by ORTIM: 13-August-2002 ShowWindow(GetDlgItem(hMainWindow,IDCANCEL),bCancelShow?SW_SHOWNA:SW_HIDE); // by ORTIM: 13-August-2002 - lpWndProcOld = (void *) GetWindowLong(hMainWindow,GWL_WNDPROC); - SetWindowLong(hMainWindow,GWL_WNDPROC,(long)ParentWndProc); + lpWndProcOld = (void *) SetWindowLong(hMainWindow,GWL_WNDPROC,(long)ParentWndProc); // Added by Amir Szekely 22nd July 2002 HFONT hFont = (HFONT)SendMessage(hMainWindow, WM_GETFONT, 0, 0); @@ -975,10 +983,7 @@ extern "C" void __declspec(dllexport) dialog(HWND hwndParent, int string_size, // we don't save settings on cancel since that means your installer will likely // quit soon, which means the ini might get flushed late and cause crap. :) anwyay. - if (!g_is_cancel) SaveSettings((*stacktop)->text); - popstring(NULL); - - pushstring(g_is_cancel?"cancel":g_is_back?"back":"success"); + if (!g_is_cancel) SaveSettings(); if (lpWndProcOld) SetWindowLong(hMainWindow,GWL_WNDPROC,(long)lpWndProcOld); @@ -1013,6 +1018,9 @@ extern "C" void __declspec(dllexport) dialog(HWND hwndParent, int string_size, FREE(pFields[nIdx].pszRoot); } FREE(pFields); + + popstring(NULL); + pushstring(g_is_cancel?"cancel":g_is_back?"back":"success"); } diff --git a/Plugins/InstallOptions.dll b/Plugins/InstallOptions.dll index c5bf23c6f2138a9046cf167fe3e9cb4c461dbad2..667ffd8c058e0e90a8e269faece9286e5d870ace 100644 GIT binary patch delta 5892 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 VY%s(PTMQG1hYP+3fc-z*^M4q1I9dPz