James Hawkins : msi: Implement the UILevel property of the Installer object .

Alexandre Julliard julliard at winehq.org
Sat Mar 1 06:13:24 CST 2008


Module: wine
Branch: master
Commit: 617eb48d5bb2b3182a4bed00676851fea029ee90
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=617eb48d5bb2b3182a4bed00676851fea029ee90

Author: James Hawkins <jhawkins at codeweavers.com>
Date:   Fri Feb 29 13:37:44 2008 -0600

msi: Implement the UILevel property of the Installer object.

---

 dlls/msi/automation.c        |   26 ++++++++++++++++++++++++++
 dlls/msi/msiserver.idl       |   15 +++++++++++++++
 dlls/msi/msiserver_dispids.h |    1 +
 dlls/msi/tests/automation.c  |    6 ++----
 4 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c
index dc94cbc..ed6b7f1 100644
--- a/dlls/msi/automation.c
+++ b/dlls/msi/automation.c
@@ -1535,6 +1535,7 @@ static HRESULT WINAPI InstallerImpl_Invoke(
     HRESULT hr;
     LPWSTR szString = NULL;
     DWORD dwSize = 0;
+    INSTALLUILEVEL ui;
 
     VariantInit(&varg0);
     VariantInit(&varg1);
@@ -1627,6 +1628,31 @@ static HRESULT WINAPI InstallerImpl_Invoke(
             else return DISP_E_MEMBERNOTFOUND;
             break;
 
+        case DISPID_INSTALLER_UILEVEL:
+            if (wFlags & DISPATCH_PROPERTYPUT)
+            {
+                hr = DispGetParam(pDispParams, 0, VT_I4, &varg0, puArgErr);
+                if (FAILED(hr)) return hr;
+                if ((ui = MsiSetInternalUI(V_I4(&varg0), NULL) == INSTALLUILEVEL_NOCHANGE))
+                {
+                    ERR("MsiSetInternalUI failed\n");
+                    return DISP_E_EXCEPTION;
+                }
+            }
+            else if (wFlags & DISPATCH_PROPERTYGET)
+            {
+                if ((ui = MsiSetInternalUI(INSTALLUILEVEL_NOCHANGE, NULL) == INSTALLUILEVEL_NOCHANGE))
+                {
+                    ERR("MsiSetInternalUI failed\n");
+                    return DISP_E_EXCEPTION;
+                }
+
+                V_VT(pVarResult) = VT_I4;
+                V_I4(pVarResult) = ui;
+            }
+            else return DISP_E_MEMBERNOTFOUND;
+            break;
+
         case DISPID_INSTALLER_INSTALLPRODUCT:
             if (wFlags & DISPATCH_METHOD)
             {
diff --git a/dlls/msi/msiserver.idl b/dlls/msi/msiserver.idl
index 317a3ac..d5b47ac 100644
--- a/dlls/msi/msiserver.idl
+++ b/dlls/msi/msiserver.idl
@@ -126,10 +126,25 @@ library WindowsInstaller
         msiOpenDatabaseModePatchFile = 32
     } MsiOpenDatabaseMode;
 
+    typedef enum {
+        msiUILevelNoChange = 0,
+        msiUILevelDefault = 1,
+        msiUILevelNone = 2,
+        msiUILevelBasic = 3,
+        msiUILevelReduced = 4,
+        msiUILevelFull = 5,
+        msiUILevelHideCancel = 32,
+        msiUILevelProgressOnly = 64,
+        msiUILevelEndDialog = 128,
+        msiUILevelSourceResOnly = 256
+    } MsiUILevel;
+
     [ uuid(000C1090-0000-0000-C000-000000000046) ]
     dispinterface Installer
     {
     properties:
+        [id(DISPID_INSTALLER_UILEVEL)]
+            MsiUILevel UILevel;
     methods:
         [id(DISPID_INSTALLER_CREATERECORD)]
             Record *CreateRecord([in] long Count);
diff --git a/dlls/msi/msiserver_dispids.h b/dlls/msi/msiserver_dispids.h
index afbadbb..3a58f6a 100644
--- a/dlls/msi/msiserver_dispids.h
+++ b/dlls/msi/msiserver_dispids.h
@@ -19,6 +19,7 @@
 #define DISPID_INSTALLER_CREATERECORD 1
 #define DISPID_INSTALLER_OPENPACKAGE 2
 #define DISPID_INSTALLER_OPENDATABASE 4
+#define DISPID_INSTALLER_UILEVEL 6
 #define DISPID_INSTALLER_INSTALLPRODUCT 8
 #define DISPID_INSTALLER_VERSION 9
 #define DISPID_INSTALLER_REGISTRYVALUE 11
diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c
index 09d1279..089360b 100644
--- a/dlls/msi/tests/automation.c
+++ b/dlls/msi/tests/automation.c
@@ -470,11 +470,9 @@ static void test_dispid(void)
     ok( get_dispid( pInstaller, "OpenPackage" ) == 2, "dispid wrong\n");
     todo_wine ok( get_dispid( pInstaller, "OpenProduct" ) == 3, "dispid wrong\n");
     ok( get_dispid( pInstaller, "OpenDatabase" ) == 4, "dispid wrong\n");
-    todo_wine {
-    ok( get_dispid( pInstaller, "SummaryInformation" ) == 5, "dispid wrong\n");
+    todo_wine ok( get_dispid( pInstaller, "SummaryInformation" ) == 5, "dispid wrong\n");
     ok( get_dispid( pInstaller, "UILevel" ) == 6, "dispid wrong\n");
-    ok( get_dispid( pInstaller, "EnableLog" ) == 7, "dispid wrong\n");
-    }
+    todo_wine ok( get_dispid( pInstaller, "EnableLog" ) == 7, "dispid wrong\n");
     ok( get_dispid( pInstaller, "InstallProduct" ) == 8, "dispid wrong\n");
     ok( get_dispid( pInstaller, "Version" ) == 9, "dispid wrong\n");
     todo_wine {




More information about the wine-cvs mailing list