aboutsummaryrefslogtreecommitdiff
path: root/src/ext
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-10-31 14:20:44 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-11-01 16:34:09 -0500
commit7e60078d4a7fe748a39c135def9e84a2421ab474 (patch)
tree51dbe5067ca9596f99107719734c4946e4c080b4 /src/ext
parentc092722a147940532b08f62403e182ef279f2c74 (diff)
downloadwix-7e60078d4a7fe748a39c135def9e84a2421ab474.tar.gz
wix-7e60078d4a7fe748a39c135def9e84a2421ab474.tar.bz2
wix-7e60078d4a7fe748a39c135def9e84a2421ab474.zip
Avoid using control ids inside of thmutil.
Diffstat (limited to 'src/ext')
-rw-r--r--src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp314
-rw-r--r--src/ext/Bal/wixstdba/precomp.h1
2 files changed, 242 insertions, 73 deletions
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
index 23158a1c..d1b18cb3 100644
--- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
+++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
@@ -80,7 +80,7 @@ static LPCWSTR vrgwzPageNames[] = {
80// The range [0, 100) is unused to avoid collisions with system ids, 80// The range [0, 100) is unused to avoid collisions with system ids,
81// the range [100, 0x4000) is unused to avoid collisions with thmutil, 81// the range [100, 0x4000) is unused to avoid collisions with thmutil,
82// the range [0x4000, 0x8000) is unused to avoid collisions with BAFunctions. 82// the range [0x4000, 0x8000) is unused to avoid collisions with BAFunctions.
83const WORD WIXSTDBA_FIRST_ASSIGN_CONTROL_ID = 0x8000; 83const WORD WIXSTDBA_FIRST_ASSIGN_CONTROL_ID = 0x8000;
84 84
85enum WIXSTDBA_CONTROL 85enum WIXSTDBA_CONTROL
86{ 86{
@@ -119,36 +119,8 @@ enum WIXSTDBA_CONTROL
119 WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, 119 WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK,
120 WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, 120 WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT,
121 WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, 121 WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON,
122};
123 122
124static THEME_ASSIGN_CONTROL_ID vrgInitControls[] = { 123 LAST_WIXSTDBA_CONTROL,
125 { WIXSTDBA_CONTROL_INSTALL_BUTTON, L"InstallButton" },
126 { WIXSTDBA_CONTROL_EULA_RICHEDIT, L"EulaRichedit" },
127 { WIXSTDBA_CONTROL_EULA_LINK, L"EulaHyperlink" },
128 { WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, L"EulaAcceptCheckbox" },
129
130 { WIXSTDBA_CONTROL_REPAIR_BUTTON, L"RepairButton" },
131 { WIXSTDBA_CONTROL_UNINSTALL_BUTTON, L"UninstallButton" },
132
133 { WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, L"CacheProgressPackageText" },
134 { WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, L"CacheProgressbar" },
135 { WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, L"CacheProgressText" },
136 { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, L"ExecuteProgressPackageText" },
137 { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, L"ExecuteProgressbar" },
138 { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, L"ExecuteProgressText" },
139 { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, L"ExecuteProgressActionDataText"},
140 { WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, L"OverallProgressPackageText" },
141 { WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, L"OverallProgressbar" },
142 { WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, L"OverallCalculatedProgressbar" },
143 { WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, L"OverallProgressText" },
144 { WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, L"ProgressCancelButton" },
145
146 { WIXSTDBA_CONTROL_LAUNCH_BUTTON, L"LaunchButton" },
147 { WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, L"SuccessRestartButton" },
148
149 { WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, L"FailureLogFileLink" },
150 { WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, L"FailureMessageText" },
151 { WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, L"FailureRestartButton" },
152}; 124};
153 125
154typedef struct _WIXSTDBA_PACKAGE_INFO 126typedef struct _WIXSTDBA_PACKAGE_INFO
@@ -589,7 +561,7 @@ public: // IBootstrapperApplication
589 561
590 wz = sczFormattedString ? sczFormattedString : L"Pausing Windows automatic updates"; 562 wz = sczFormattedString ? sczFormattedString : L"Pausing Windows automatic updates";
591 563
592 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); 564 ThemeSetTextControl(m_pControlOverallProgressPackageText, wz);
593 565
594 ReleaseStr(sczFormattedString); 566 ReleaseStr(sczFormattedString);
595 return hr; 567 return hr;
@@ -615,7 +587,7 @@ public: // IBootstrapperApplication
615 587
616 wz = sczFormattedString ? sczFormattedString : L"Creating system restore point"; 588 wz = sczFormattedString ? sczFormattedString : L"Creating system restore point";
617 589
618 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); 590 ThemeSetTextControl(m_pControlOverallProgressPackageText, wz);
619 591
620 ReleaseStr(sczFormattedString); 592 ReleaseStr(sczFormattedString);
621 return hr; 593 return hr;
@@ -635,12 +607,12 @@ public: // IBootstrapperApplication
635 HRESULT hr = BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); 607 HRESULT hr = BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage);
636 LPCWSTR wz = (SUCCEEDED(hr) && pPackage->sczDisplayName) ? pPackage->sczDisplayName : wzPackageId; 608 LPCWSTR wz = (SUCCEEDED(hr) && pPackage->sczDisplayName) ? pPackage->sczDisplayName : wzPackageId;
637 609
638 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, wz); 610 ThemeSetTextControl(m_pControlCacheProgressPackageText, wz);
639 611
640 // If something started executing, leave it in the overall progress text. 612 // If something started executing, leave it in the overall progress text.
641 if (!m_fStartedExecution) 613 if (!m_fStartedExecution)
642 { 614 {
643 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); 615 ThemeSetTextControl(m_pControlOverallProgressPackageText, wz);
644 } 616 }
645 } 617 }
646 618
@@ -778,7 +750,7 @@ public: // IBootstrapperApplication
778 ) 750 )
779 { 751 {
780 UpdateCacheProgress(SUCCEEDED(hrStatus) ? 100 : 0); 752 UpdateCacheProgress(SUCCEEDED(hrStatus) ? 100 : 0);
781 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, L""); 753 ThemeSetTextControl(m_pControlCacheProgressPackageText, L"");
782 SetState(WIXSTDBA_STATE_CACHED, S_OK); // we always return success here and let OnApplyComplete() deal with the error. 754 SetState(WIXSTDBA_STATE_CACHED, S_OK); // we always return success here and let OnApplyComplete() deal with the error.
783 return __super::OnCacheComplete(hrStatus); 755 return __super::OnCacheComplete(hrStatus);
784 } 756 }
@@ -891,7 +863,7 @@ public: // IBootstrapperApplication
891 863
892 if (INSTALLMESSAGE_ACTIONSTART == messageType) 864 if (INSTALLMESSAGE_ACTIONSTART == messageType)
893 { 865 {
894 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, wzMessage); 866 ThemeSetTextControl(m_pControlExecuteProgressActionDataText, wzMessage);
895 } 867 }
896 868
897 return __super::OnExecuteMsiMessage(wzPackageId, messageType, dwUIHint, wzMessage, cData, rgwzData, nRecommendation, pResult); 869 return __super::OnExecuteMsiMessage(wzPackageId, messageType, dwUIHint, wzMessage, cData, rgwzData, nRecommendation, pResult);
@@ -911,9 +883,9 @@ public: // IBootstrapperApplication
911#endif 883#endif
912 884
913 ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage); 885 ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage);
914 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, wzProgress); 886 ThemeSetTextControl(m_pControlOverallProgressText, wzProgress);
915 887
916 ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, dwOverallProgressPercentage); 888 ThemeSetProgressControl(m_pControlOverallProgressbar, dwOverallProgressPercentage);
917 SetTaskbarButtonProgress(dwOverallProgressPercentage); 889 SetTaskbarButtonProgress(dwOverallProgressPercentage);
918 890
919 return __super::OnProgress(dwProgressPercentage, dwOverallProgressPercentage, pfCancel); 891 return __super::OnProgress(dwProgressPercentage, dwOverallProgressPercentage, pfCancel);
@@ -972,8 +944,8 @@ public: // IBootstrapperApplication
972 944
973 fShowingInternalUiThisPackage = INSTALLUILEVEL_NONE != (INSTALLUILEVEL_NONE & uiLevel); 945 fShowingInternalUiThisPackage = INSTALLUILEVEL_NONE != (INSTALLUILEVEL_NONE & uiLevel);
974 946
975 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, wz); 947 ThemeSetTextControl(m_pControlExecuteProgressPackageText, wz);
976 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); 948 ThemeSetTextControl(m_pControlOverallProgressPackageText, wz);
977 } 949 }
978 950
979 ::EnterCriticalSection(&m_csShowingInternalUiThisPackage); 951 ::EnterCriticalSection(&m_csShowingInternalUiThisPackage);
@@ -1000,12 +972,12 @@ public: // IBootstrapperApplication
1000#endif 972#endif
1001 973
1002 ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage); 974 ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage);
1003 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, wzProgress); 975 ThemeSetTextControl(m_pControlExecuteProgressText, wzProgress);
1004 976
1005 ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, dwOverallProgressPercentage); 977 ThemeSetProgressControl(m_pControlExecuteProgressbar, dwOverallProgressPercentage);
1006 978
1007 m_dwCalculatedExecuteProgress = dwOverallProgressPercentage * (100 - WIXSTDBA_ACQUIRE_PERCENTAGE) / 100; 979 m_dwCalculatedExecuteProgress = dwOverallProgressPercentage * (100 - WIXSTDBA_ACQUIRE_PERCENTAGE) / 100;
1008 ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); 980 ThemeSetProgressControl(m_pControlOverallCalculatedProgressbar, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress);
1009 981
1010 SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); 982 SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress);
1011 983
@@ -1051,10 +1023,10 @@ public: // IBootstrapperApplication
1051 { 1023 {
1052 HRESULT hr = S_OK; 1024 HRESULT hr = S_OK;
1053 1025
1054 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, L""); 1026 ThemeSetTextControl(m_pControlExecuteProgressPackageText, L"");
1055 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, L""); 1027 ThemeSetTextControl(m_pControlExecuteProgressActionDataText, L"");
1056 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, L""); 1028 ThemeSetTextControl(m_pControlOverallProgressPackageText, L"");
1057 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, FALSE); // no more cancel. 1029 ThemeControlEnable(m_pControlProgressCancelButton, FALSE); // no more cancel.
1058 m_fShowingInternalUiThisPackage = FALSE; 1030 m_fShowingInternalUiThisPackage = FALSE;
1059 1031
1060 SetState(WIXSTDBA_STATE_EXECUTED, S_OK); // we always return success here and let OnApplyComplete() deal with the error. 1032 SetState(WIXSTDBA_STATE_EXECUTED, S_OK); // we always return success here and let OnApplyComplete() deal with the error.
@@ -2933,12 +2905,27 @@ private:
2933 BA_FUNCTIONS_ONTHEMECONTROLLOADING_ARGS themeControlLoadingArgs = { }; 2905 BA_FUNCTIONS_ONTHEMECONTROLLOADING_ARGS themeControlLoadingArgs = { };
2934 BA_FUNCTIONS_ONTHEMECONTROLLOADING_RESULTS themeControlLoadingResults = { }; 2906 BA_FUNCTIONS_ONTHEMECONTROLLOADING_RESULTS themeControlLoadingResults = { };
2935 2907
2936 for (DWORD iAssignControl = 0; iAssignControl < countof(vrgInitControls); ++iAssignControl) 2908 for (DWORD iAssignControl = 0; iAssignControl < countof(m_rgInitControls); ++iAssignControl)
2937 { 2909 {
2938 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, pArgs->pThemeControl->sczName, -1, vrgInitControls[iAssignControl].wzName, -1)) 2910 THEME_ASSIGN_CONTROL_ID* pAssignControl = m_rgInitControls + iAssignControl;
2911 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, pArgs->pThemeControl->sczName, -1, pAssignControl->wzName, -1))
2939 { 2912 {
2913 if (!pAssignControl->ppControl)
2914 {
2915 BalExitWithRootFailure(hr, E_INVALIDSTATE, "Control '%ls' has no member variable", pAssignControl->wzName);
2916 }
2917
2918 if (*pAssignControl->ppControl)
2919 {
2920 BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Duplicate control name: %ls", pAssignControl->wzName);
2921 }
2922 else
2923 {
2924 *pAssignControl->ppControl = pArgs->pThemeControl;
2925 }
2926
2940 fProcessed = TRUE; 2927 fProcessed = TRUE;
2941 pResults->wId = vrgInitControls[iAssignControl].wId; 2928 pResults->wId = pAssignControl->wId;
2942 ExitFunction(); 2929 ExitFunction();
2943 } 2930 }
2944 } 2931 }
@@ -3059,7 +3046,7 @@ private:
3059 hr = LocProbeForFile(sczLicenseDirectory, sczLicenseFilename, m_sczLanguage, &sczLicensePath); 3046 hr = LocProbeForFile(sczLicenseDirectory, sczLicenseFilename, m_sczLanguage, &sczLicensePath);
3060 ExitOnFailure(hr, "Failed to probe for localized license file."); 3047 ExitOnFailure(hr, "Failed to probe for localized license file.");
3061 3048
3062 hr = ThemeLoadRichEditFromFile(m_pTheme, pThemeControl->wId, sczLicensePath, m_hModule); 3049 hr = ThemeLoadRichEditFromFile(pThemeControl, sczLicensePath, m_hModule);
3063 ExitOnFailure(hr, "Failed to load license file into richedit control."); 3050 ExitOnFailure(hr, "Failed to load license file into richedit control.");
3064 3051
3065 LExit: 3052 LExit:
@@ -3178,7 +3165,7 @@ private:
3178 hr = m_pEngine->Apply(m_hWnd); 3165 hr = m_pEngine->Apply(m_hWnd);
3179 BalExitOnFailure(hr, "Failed to start applying packages."); 3166 BalExitOnFailure(hr, "Failed to start applying packages.");
3180 3167
3181 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, TRUE); // ensure the cancel button is enabled before starting. 3168 ThemeControlEnable(m_pControlProgressCancelButton, TRUE); // ensure the cancel button is enabled before starting.
3182 3169
3183 LExit: 3170 LExit:
3184 if (FAILED(hr)) 3171 if (FAILED(hr))
@@ -3229,22 +3216,22 @@ private:
3229 { 3216 {
3230 BalGetNumericVariable(WIXBUNDLE_VARIABLE_ELEVATED, &llElevated); 3217 BalGetNumericVariable(WIXBUNDLE_VARIABLE_ELEVATED, &llElevated);
3231 } 3218 }
3232 ThemeControlElevates(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, (m_Bundle.fPerMachine && !llElevated)); 3219 ThemeControlElevates(m_pControlInstallButton, (m_Bundle.fPerMachine && !llElevated));
3233 3220
3234 // If the EULA control exists, show it only if a license URL is provided as well. 3221 // If the EULA control exists, show it only if a license URL is provided as well.
3235 if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_LINK)) 3222 if (m_pControlEulaHyperlink)
3236 { 3223 {
3237 BOOL fEulaLink = (m_sczLicenseUrl && *m_sczLicenseUrl); 3224 BOOL fEulaLink = (m_sczLicenseUrl && *m_sczLicenseUrl);
3238 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_EULA_LINK, fEulaLink); 3225 ThemeControlEnable(m_pControlEulaHyperlink, fEulaLink);
3239 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, fEulaLink); 3226 ThemeControlEnable(m_pControlEulaAcceptCheckbox, fEulaLink);
3240 } 3227 }
3241 3228
3242 BOOL fAcceptedLicense = !ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX) || !ThemeControlEnabled(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX) || ThemeIsControlChecked(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX); 3229 BOOL fAcceptedLicense = !m_pControlEulaAcceptCheckbox || !ThemeControlEnabled(m_pControlEulaAcceptCheckbox) || ThemeIsControlChecked(m_pControlEulaAcceptCheckbox);
3243 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, fAcceptedLicense); 3230 ThemeControlEnable(m_pControlInstallButton, fAcceptedLicense);
3244 } 3231 }
3245 else if (m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == dwNewPageId) 3232 else if (m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == dwNewPageId)
3246 { 3233 {
3247 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_REPAIR_BUTTON, !m_fSuppressRepair); 3234 ThemeControlEnable(m_pControlRepairButton, !m_fSuppressRepair);
3248 } 3235 }
3249 else if (m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS] == dwNewPageId) // on the "Success" page, check if the restart or launch button should be enabled. 3236 else if (m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS] == dwNewPageId) // on the "Success" page, check if the restart or launch button should be enabled.
3250 { 3237 {
@@ -3257,13 +3244,13 @@ private:
3257 fEnableRestartButton = TRUE; 3244 fEnableRestartButton = TRUE;
3258 } 3245 }
3259 } 3246 }
3260 else if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON)) 3247 else if (m_pControlLaunchButton)
3261 { 3248 {
3262 fLaunchTargetExists = BalVariableExists(WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH); 3249 fLaunchTargetExists = BalVariableExists(WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH);
3263 } 3250 }
3264 3251
3265 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON, fLaunchTargetExists && BOOTSTRAPPER_ACTION_UNINSTALL < m_plannedAction); 3252 ThemeControlEnable(m_pControlLaunchButton, fLaunchTargetExists && BOOTSTRAPPER_ACTION_UNINSTALL < m_plannedAction);
3266 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, fEnableRestartButton); 3253 ThemeControlEnable(m_pControlSuccessRestartButton, fEnableRestartButton);
3267 } 3254 }
3268 else if (m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE] == dwNewPageId) // on the "Failure" page, show error message and check if the restart button should be enabled. 3255 else if (m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE] == dwNewPageId) // on the "Failure" page, show error message and check if the restart button should be enabled.
3269 { 3256 {
@@ -3347,7 +3334,7 @@ private:
3347 StrAllocFormatted(&sczText, L"0x%08x - %ls", m_hrFinal, sczUnformattedText); 3334 StrAllocFormatted(&sczText, L"0x%08x - %ls", m_hrFinal, sczUnformattedText);
3348 } 3335 }
3349 3336
3350 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, sczText); 3337 ThemeSetTextControl(m_pControlFailureMessageText, sczText);
3351 fShowErrorMessage = TRUE; 3338 fShowErrorMessage = TRUE;
3352 } 3339 }
3353 3340
@@ -3359,9 +3346,9 @@ private:
3359 } 3346 }
3360 } 3347 }
3361 3348
3362 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, fShowLogLink); 3349 ThemeControlEnable(m_pControlFailureLogFileLink, fShowLogLink);
3363 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, fShowErrorMessage); 3350 ThemeControlEnable(m_pControlFailureMessageText, fShowErrorMessage);
3364 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, fEnableRestartButton); 3351 ThemeControlEnable(m_pControlFailureRestartButton, fEnableRestartButton);
3365 } 3352 }
3366 3353
3367 HRESULT hr = ThemeShowPage(m_pTheme, dwOldPageId, SW_HIDE); 3354 HRESULT hr = ThemeShowPage(m_pTheme, dwOldPageId, SW_HIDE);
@@ -3379,7 +3366,7 @@ private:
3379 // On the install page set the focus to the install button or the next enabled control if install is disabled. 3366 // On the install page set the focus to the install button or the next enabled control if install is disabled.
3380 if (m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId) 3367 if (m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId)
3381 { 3368 {
3382 ThemeSetFocus(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON); 3369 ThemeSetFocus(m_pControlInstallButton);
3383 } 3370 }
3384 } 3371 }
3385 } 3372 }
@@ -3423,7 +3410,7 @@ private:
3423 // If we canceled, disable cancel button since clicking it again is silly. 3410 // If we canceled, disable cancel button since clicking it again is silly.
3424 if (fClose) 3411 if (fClose)
3425 { 3412 {
3426 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, FALSE); 3413 ThemeControlEnable(m_pControlProgressCancelButton, FALSE);
3427 } 3414 }
3428 3415
3429 fClose = FALSE; 3416 fClose = FALSE;
@@ -3447,8 +3434,8 @@ private:
3447 // 3434 //
3448 void OnClickAcceptCheckbox() 3435 void OnClickAcceptCheckbox()
3449 { 3436 {
3450 BOOL fAcceptedLicense = ThemeIsControlChecked(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX); 3437 BOOL fAcceptedLicense = ThemeIsControlChecked(m_pControlEulaAcceptCheckbox);
3451 ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, fAcceptedLicense); 3438 ThemeControlEnable(m_pControlInstallButton, fAcceptedLicense);
3452 } 3439 }
3453 3440
3454 3441
@@ -3954,12 +3941,12 @@ LExit:
3954 WCHAR wzProgress[5] = { }; 3941 WCHAR wzProgress[5] = { };
3955 3942
3956 ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallPercentage); 3943 ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallPercentage);
3957 ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, wzProgress); 3944 ThemeSetTextControl(m_pControlCacheProgressText, wzProgress);
3958 3945
3959 ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, dwOverallPercentage); 3946 ThemeSetProgressControl(m_pControlCacheProgressbar, dwOverallPercentage);
3960 3947
3961 m_dwCalculatedCacheProgress = dwOverallPercentage * WIXSTDBA_ACQUIRE_PERCENTAGE / 100; 3948 m_dwCalculatedCacheProgress = dwOverallPercentage * WIXSTDBA_ACQUIRE_PERCENTAGE / 100;
3962 ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); 3949 ThemeSetProgressControl(m_pControlOverallCalculatedProgressbar, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress);
3963 3950
3964 SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); 3951 SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress);
3965 } 3952 }
@@ -4088,6 +4075,8 @@ public:
4088 __in IBootstrapperEngine* pEngine 4075 __in IBootstrapperEngine* pEngine
4089 ) : CBalBaseBootstrapperApplication(pEngine, 3, 3000) 4076 ) : CBalBaseBootstrapperApplication(pEngine, 3, 3000)
4090 { 4077 {
4078 THEME_ASSIGN_CONTROL_ID* pAssignControl = NULL;
4079
4091 m_hModule = hModule; 4080 m_hModule = hModule;
4092 m_command = { }; 4081 m_command = { };
4093 m_createArgs = { }; 4082 m_createArgs = { };
@@ -4141,6 +4130,148 @@ public:
4141 m_hBAFModule = NULL; 4130 m_hBAFModule = NULL;
4142 m_pfnBAFunctionsProc = NULL; 4131 m_pfnBAFunctionsProc = NULL;
4143 m_pvBAFunctionsProcContext = NULL; 4132 m_pvBAFunctionsProcContext = NULL;
4133
4134 C_ASSERT(0 == WIXSTDBA_CONTROL_INSTALL_BUTTON - WIXSTDBA_FIRST_ASSIGN_CONTROL_ID);
4135 pAssignControl = m_rgInitControls;
4136
4137 pAssignControl->wId = WIXSTDBA_CONTROL_INSTALL_BUTTON;
4138 pAssignControl->wzName = L"InstallButton";
4139 pAssignControl->ppControl = &m_pControlInstallButton;
4140 m_pControlInstallButton = NULL;
4141 ++pAssignControl;
4142
4143 pAssignControl->wId = WIXSTDBA_CONTROL_EULA_RICHEDIT;
4144 pAssignControl->wzName = L"EulaRichedit";
4145 pAssignControl->ppControl = &m_pControlEulaRichedit;
4146 m_pControlEulaRichedit = NULL;
4147 ++pAssignControl;
4148
4149 pAssignControl->wId = WIXSTDBA_CONTROL_EULA_LINK;
4150 pAssignControl->wzName = L"EulaHyperlink";
4151 pAssignControl->ppControl = &m_pControlEulaHyperlink;
4152 m_pControlEulaHyperlink = NULL;
4153 ++pAssignControl;
4154
4155 pAssignControl->wId = WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX;
4156 pAssignControl->wzName = L"EulaAcceptCheckbox";
4157 pAssignControl->ppControl = &m_pControlEulaAcceptCheckbox;
4158 m_pControlEulaAcceptCheckbox = NULL;
4159 ++pAssignControl;
4160
4161 pAssignControl->wId = WIXSTDBA_CONTROL_REPAIR_BUTTON;
4162 pAssignControl->wzName = L"RepairButton";
4163 pAssignControl->ppControl = &m_pControlRepairButton;
4164 m_pControlRepairButton = NULL;
4165 ++pAssignControl;
4166
4167 pAssignControl->wId = WIXSTDBA_CONTROL_UNINSTALL_BUTTON;
4168 pAssignControl->wzName = L"UninstallButton";
4169 pAssignControl->ppControl = &m_pControlUninstallButton;
4170 m_pControlUninstallButton = NULL;
4171 ++pAssignControl;
4172
4173 pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT;
4174 pAssignControl->wzName = L"CacheProgressPackageText";
4175 pAssignControl->ppControl = &m_pControlCacheProgressPackageText;
4176 m_pControlCacheProgressPackageText = NULL;
4177 ++pAssignControl;
4178
4179 pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR;
4180 pAssignControl->wzName = L"CacheProgressbar";
4181 pAssignControl->ppControl = &m_pControlCacheProgressbar;
4182 m_pControlCacheProgressbar = NULL;
4183 ++pAssignControl;
4184
4185 pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT;
4186 pAssignControl->wzName = L"CacheProgressText";
4187 pAssignControl->ppControl = &m_pControlCacheProgressText;
4188 m_pControlCacheProgressText = NULL;
4189 ++pAssignControl;
4190
4191 pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT;
4192 pAssignControl->wzName = L"ExecuteProgressPackageText";
4193 pAssignControl->ppControl = &m_pControlExecuteProgressPackageText;
4194 m_pControlExecuteProgressPackageText = NULL;
4195 ++pAssignControl;
4196
4197 pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR;
4198 pAssignControl->wzName = L"ExecuteProgressbar";
4199 pAssignControl->ppControl = &m_pControlExecuteProgressbar;
4200 m_pControlExecuteProgressbar = NULL;
4201 ++pAssignControl;
4202
4203 pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT;
4204 pAssignControl->wzName = L"ExecuteProgressText";
4205 pAssignControl->ppControl = &m_pControlExecuteProgressText;
4206 m_pControlExecuteProgressText = NULL;
4207 ++pAssignControl;
4208
4209 pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT;
4210 pAssignControl->wzName = L"ExecuteProgressActionDataText";
4211 pAssignControl->ppControl = &m_pControlExecuteProgressActionDataText;
4212 m_pControlExecuteProgressActionDataText = NULL;
4213 ++pAssignControl;
4214
4215 pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT;
4216 pAssignControl->wzName = L"OverallProgressPackageText";
4217 pAssignControl->ppControl = &m_pControlOverallProgressPackageText;
4218 m_pControlOverallProgressPackageText = NULL;
4219 ++pAssignControl;
4220
4221 pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR;
4222 pAssignControl->wzName = L"OverallProgressbar";
4223 pAssignControl->ppControl = &m_pControlOverallProgressbar;
4224 m_pControlOverallProgressbar = NULL;
4225 ++pAssignControl;
4226
4227 pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR;
4228 pAssignControl->wzName = L"OverallCalculatedProgressbar";
4229 pAssignControl->ppControl = &m_pControlOverallCalculatedProgressbar;
4230 m_pControlOverallCalculatedProgressbar = NULL;
4231 ++pAssignControl;
4232
4233 pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT;
4234 pAssignControl->wzName = L"OverallProgressText";
4235 pAssignControl->ppControl = &m_pControlOverallProgressText;
4236 m_pControlOverallProgressText = NULL;
4237 ++pAssignControl;
4238
4239 pAssignControl->wId = WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON;
4240 pAssignControl->wzName = L"ProgressCancelButton";
4241 pAssignControl->ppControl = &m_pControlProgressCancelButton;
4242 m_pControlProgressCancelButton = NULL;
4243 ++pAssignControl;
4244
4245 pAssignControl->wId = WIXSTDBA_CONTROL_LAUNCH_BUTTON;
4246 pAssignControl->wzName = L"LaunchButton";
4247 pAssignControl->ppControl = &m_pControlLaunchButton;
4248 m_pControlLaunchButton = NULL;
4249 ++pAssignControl;
4250
4251 pAssignControl->wId = WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON;
4252 pAssignControl->wzName = L"SuccessRestartButton";
4253 pAssignControl->ppControl = &m_pControlSuccessRestartButton;
4254 m_pControlSuccessRestartButton = NULL;
4255 ++pAssignControl;
4256
4257 pAssignControl->wId = WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK;
4258 pAssignControl->wzName = L"FailureLogFileLink";
4259 pAssignControl->ppControl = &m_pControlFailureLogFileLink;
4260 m_pControlFailureLogFileLink = NULL;
4261 ++pAssignControl;
4262
4263 pAssignControl->wId = WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT;
4264 pAssignControl->wzName = L"FailureMessageText";
4265 pAssignControl->ppControl = &m_pControlFailureMessageText;
4266 m_pControlFailureMessageText = NULL;
4267 ++pAssignControl;
4268
4269 pAssignControl->wId = WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON;
4270 pAssignControl->wzName = L"FailureRestartButton";
4271 pAssignControl->ppControl = &m_pControlFailureRestartButton;
4272 m_pControlFailureRestartButton = NULL;
4273
4274 C_ASSERT(LAST_WIXSTDBA_CONTROL == WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON + 1);
4144 } 4275 }
4145 4276
4146 4277
@@ -4201,11 +4332,48 @@ private:
4201 4332
4202 LPWSTR m_sczLanguage; 4333 LPWSTR m_sczLanguage;
4203 THEME* m_pTheme; 4334 THEME* m_pTheme;
4335 THEME_ASSIGN_CONTROL_ID m_rgInitControls[LAST_WIXSTDBA_CONTROL - WIXSTDBA_FIRST_ASSIGN_CONTROL_ID];
4204 DWORD m_rgdwPageIds[countof(vrgwzPageNames)]; 4336 DWORD m_rgdwPageIds[countof(vrgwzPageNames)];
4205 HANDLE m_hUiThread; 4337 HANDLE m_hUiThread;
4206 BOOL m_fRegistered; 4338 BOOL m_fRegistered;
4207 HWND m_hWnd; 4339 HWND m_hWnd;
4208 4340
4341 // Welcome page
4342 const THEME_CONTROL* m_pControlInstallButton;
4343 const THEME_CONTROL* m_pControlEulaRichedit;
4344 const THEME_CONTROL* m_pControlEulaHyperlink;
4345 const THEME_CONTROL* m_pControlEulaAcceptCheckbox;
4346
4347 // Modify page
4348 const THEME_CONTROL* m_pControlRepairButton;
4349 const THEME_CONTROL* m_pControlUninstallButton;
4350
4351 // Progress page
4352 const THEME_CONTROL* m_pControlCacheProgressPackageText;
4353 const THEME_CONTROL* m_pControlCacheProgressbar;
4354 const THEME_CONTROL* m_pControlCacheProgressText;
4355
4356 const THEME_CONTROL* m_pControlExecuteProgressPackageText;
4357 const THEME_CONTROL* m_pControlExecuteProgressbar;
4358 const THEME_CONTROL* m_pControlExecuteProgressText;
4359 const THEME_CONTROL* m_pControlExecuteProgressActionDataText;
4360
4361 const THEME_CONTROL* m_pControlOverallProgressPackageText;
4362 const THEME_CONTROL* m_pControlOverallProgressbar;
4363 const THEME_CONTROL* m_pControlOverallCalculatedProgressbar;
4364 const THEME_CONTROL* m_pControlOverallProgressText;
4365
4366 const THEME_CONTROL* m_pControlProgressCancelButton;
4367
4368 // Success page
4369 const THEME_CONTROL* m_pControlLaunchButton;
4370 const THEME_CONTROL* m_pControlSuccessRestartButton;
4371
4372 // Failure page
4373 const THEME_CONTROL* m_pControlFailureLogFileLink;
4374 const THEME_CONTROL* m_pControlFailureMessageText;
4375 const THEME_CONTROL* m_pControlFailureRestartButton;
4376
4209 WIXSTDBA_STATE m_state; 4377 WIXSTDBA_STATE m_state;
4210 HRESULT m_hrFinal; 4378 HRESULT m_hrFinal;
4211 4379
diff --git a/src/ext/Bal/wixstdba/precomp.h b/src/ext/Bal/wixstdba/precomp.h
index 547183bd..ba56ae6d 100644
--- a/src/ext/Bal/wixstdba/precomp.h
+++ b/src/ext/Bal/wixstdba/precomp.h
@@ -29,6 +29,7 @@
29#include "resrutil.h" 29#include "resrutil.h"
30#include "shelutil.h" 30#include "shelutil.h"
31#include "strutil.h" 31#include "strutil.h"
32#include "wndutil.h"
32#include "thmutil.h" 33#include "thmutil.h"
33#include "verutil.h" 34#include "verutil.h"
34#include "uriutil.h" 35#include "uriutil.h"