diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-10-31 14:20:44 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-11-01 16:34:09 -0500 |
commit | 7e60078d4a7fe748a39c135def9e84a2421ab474 (patch) | |
tree | 51dbe5067ca9596f99107719734c4946e4c080b4 /src/ext | |
parent | c092722a147940532b08f62403e182ef279f2c74 (diff) | |
download | wix-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.cpp | 314 | ||||
-rw-r--r-- | src/ext/Bal/wixstdba/precomp.h | 1 |
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. |
83 | const WORD WIXSTDBA_FIRST_ASSIGN_CONTROL_ID = 0x8000; | 83 | const WORD WIXSTDBA_FIRST_ASSIGN_CONTROL_ID = 0x8000; |
84 | 84 | ||
85 | enum WIXSTDBA_CONTROL | 85 | enum 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 | ||
124 | static 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 | ||
154 | typedef struct _WIXSTDBA_PACKAGE_INFO | 126 | typedef 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" |