]> git.sesse.net Git - vlc/blobdiff - activex/persistpropbag.cpp
s/wxwindows/wxwidgets/
[vlc] / activex / persistpropbag.cpp
index 2fc0873179b339558692051361d9d46eb168261f..ef6531a6833eb7f359962609495841ca40994f7b 100644 (file)
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 #include "plugin.h"
@@ -45,59 +45,95 @@ STDMETHODIMP VLCPersistPropertyBag::InitNew(void)
 
 STDMETHODIMP VLCPersistPropertyBag::Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog)
 {
-    if( NULL == pPropBag )
-        return E_POINTER;
-
     HRESULT hr = _p_instance->onInit();
     if( FAILED(hr) )
         return hr;
 
+    if( NULL == pPropBag )
+        return E_INVALIDARG;
+
     VARIANT value;
 
     V_VT(&value) = VT_BSTR;
-    if( S_OK == pPropBag->Read(OLESTR("filename"), &value, pErrorLog) )
+    if( S_OK == pPropBag->Read(OLESTR("mrl"), &value, pErrorLog) )
     {
-        char *src = CStrFromBSTR(_p_instance->getCodePage(), V_BSTR(&value));
-        if( NULL != src )
-        {
-            _p_instance->setSourceURL(src);
-            free(src);
-        }
+        _p_instance->setMRL(V_BSTR(&value));
         VariantClear(&value);
     }
-
-    V_VT(&value) = VT_BSTR;
-    if( S_OK == pPropBag->Read(OLESTR("src"), &value, pErrorLog) )
+    else
     {
-        char *src = CStrFromBSTR(_p_instance->getCodePage(), V_BSTR(&value));
-        if( NULL != src )
+        /*
+        ** try alternative syntax
+        */
+        V_VT(&value) = VT_BSTR;
+        if( S_OK == pPropBag->Read(OLESTR("src"), &value, pErrorLog) )
         {
-            _p_instance->setSourceURL(src);
-            free(src);
+            _p_instance->setMRL(V_BSTR(&value));
+            VariantClear(&value);
+        }
+        else
+        {
+            V_VT(&value) = VT_BSTR;
+            if( S_OK == pPropBag->Read(OLESTR("filename"), &value, pErrorLog) )
+            {
+                _p_instance->setMRL(V_BSTR(&value));
+                VariantClear(&value);
+            }
         }
-        VariantClear(&value);
     }
 
     V_VT(&value) = VT_BOOL;
     if( S_OK == pPropBag->Read(OLESTR("autoplay"), &value, pErrorLog) )
     {
-        _p_instance->setAutoStart(V_BOOL(&value) != VARIANT_FALSE);
+        _p_instance->setAutoPlay(V_BOOL(&value) != VARIANT_FALSE);
         VariantClear(&value);
     }
+    else
+    {
+        /*
+        ** try alternative syntax
+        */
+        V_VT(&value) = VT_BOOL;
+        if( S_OK == pPropBag->Read(OLESTR("autostart"), &value, pErrorLog) )
+        {
+            _p_instance->setAutoPlay(V_BOOL(&value) != VARIANT_FALSE);
+            VariantClear(&value);
+        }
+    }
 
-    V_VT(&value) = VT_BOOL;
-    if( S_OK == pPropBag->Read(OLESTR("autostart"), &value, pErrorLog) )
+    SIZEL size = _p_instance->getExtent();
+    V_VT(&value) = VT_I4;
+    if( S_OK == pPropBag->Read(OLESTR("extentwidth"), &value, pErrorLog) )
+    {
+         size.cx = V_I4(&value);
+        VariantClear(&value);
+    }
+    V_VT(&value) = VT_I4;
+    if( S_OK == pPropBag->Read(OLESTR("extentheight"), &value, pErrorLog) )
     {
-        _p_instance->setAutoStart(V_BOOL(&value) != VARIANT_FALSE);
+         size.cy = V_I4(&value);
         VariantClear(&value);
     }
+    _p_instance->setExtent(size);
 
     V_VT(&value) = VT_BOOL;
-    if( S_OK == pPropBag->Read(OLESTR("loop"), &value, pErrorLog) )
+    if( S_OK == pPropBag->Read(OLESTR("autoloop"), &value, pErrorLog) )
     {
-        _p_instance->setLoopMode(V_BOOL(&value) != VARIANT_FALSE);
+        _p_instance->setAutoLoop(V_BOOL(&value) != VARIANT_FALSE);
         VariantClear(&value);
     }
+    else
+    {
+        /*
+        ** try alternative syntax
+        */
+        V_VT(&value) = VT_BOOL;
+        if( S_OK == pPropBag->Read(OLESTR("loop"), &value, pErrorLog) )
+        {
+            _p_instance->setAutoLoop(V_BOOL(&value) != VARIANT_FALSE);
+            VariantClear(&value);
+        }
+    }
 
     V_VT(&value) = VT_BOOL;
     if( S_OK == pPropBag->Read(OLESTR("mute"), &value, pErrorLog) )
@@ -107,11 +143,44 @@ STDMETHODIMP VLCPersistPropertyBag::Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErr
     }
 
     V_VT(&value) = VT_BOOL;
-    if( S_OK == pPropBag->Read(OLESTR("showdisplay"), &value, pErrorLog) )
+    if( S_OK == pPropBag->Read(OLESTR("visible"), &value, pErrorLog) )
     {
         _p_instance->setVisible(V_BOOL(&value) != VARIANT_FALSE);
         VariantClear(&value);
     }
+    else
+    {
+        /*
+        ** try alternative syntax
+        */
+        V_VT(&value) = VT_BOOL;
+        if( S_OK == pPropBag->Read(OLESTR("showdisplay"), &value, pErrorLog) )
+        {
+            _p_instance->setVisible(V_BOOL(&value) != VARIANT_FALSE);
+            VariantClear(&value);
+        }
+    }
+
+    V_VT(&value) = VT_I4;
+    if( S_OK == pPropBag->Read(OLESTR("volume"), &value, pErrorLog) )
+    {
+        _p_instance->setVolume(V_I4(&value));
+        VariantClear(&value);
+    }
+
+    V_VT(&value) = VT_I4;
+    if( S_OK == pPropBag->Read(OLESTR("starttime"), &value, pErrorLog) )
+    {
+        _p_instance->setStartTime(V_I4(&value));
+        VariantClear(&value);
+    }
+
+    V_VT(&value) = VT_BSTR;
+    if( S_OK == pPropBag->Read(OLESTR("baseurl"), &value, pErrorLog) )
+    {
+        _p_instance->setBaseURL(V_BSTR(&value));
+        VariantClear(&value);
+    }
 
     return _p_instance->onLoad();
 };
@@ -119,8 +188,58 @@ STDMETHODIMP VLCPersistPropertyBag::Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErr
 STDMETHODIMP VLCPersistPropertyBag::Save(LPPROPERTYBAG pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
 {
     if( NULL == pPropBag )
-        return E_POINTER;
+        return E_INVALIDARG;
+
+    VARIANT value;
+
+    VariantInit(&value);
+
+    V_VT(&value) = VT_BOOL;
+    V_BOOL(&value) = _p_instance->getAutoLoop()? VARIANT_TRUE : VARIANT_FALSE;
+    pPropBag->Write(OLESTR("AutoLoop"), &value);
+    VariantClear(&value);
+
+    V_VT(&value) = VT_BOOL;
+    V_BOOL(&value) = _p_instance->getAutoPlay()? VARIANT_TRUE : VARIANT_FALSE;
+    pPropBag->Write(OLESTR("AutoPlay"), &value);
+    VariantClear(&value);
+
+    SIZEL size = _p_instance->getExtent();
+    V_VT(&value) = VT_I4;
+    V_I4(&value) = size.cx;
+    pPropBag->Write(OLESTR("ExtentWidth"), &value);
+    V_I4(&value) = size.cy;
+    pPropBag->Write(OLESTR("ExtentHeight"), &value);
+
+    V_VT(&value) = VT_BSTR;
+    V_BSTR(&value) = SysAllocStringLen(_p_instance->getMRL(),
+                            SysStringLen(_p_instance->getMRL()));
+    pPropBag->Write(OLESTR("MRL"), &value);
+    VariantClear(&value);
+
+    V_VT(&value) = VT_BOOL;
+    V_BOOL(&value) = _p_instance->getVisible()? VARIANT_TRUE : VARIANT_FALSE;
+    pPropBag->Write(OLESTR("Visible"), &value);
+    VariantClear(&value);
+
+    V_VT(&value) = VT_I4;
+    V_I4(&value) = _p_instance->getVolume();
+    pPropBag->Write(OLESTR("Volume"), &value);
+    VariantClear(&value);
+
+    V_VT(&value) = VT_I4;
+    V_I4(&value) = _p_instance->getStartTime();
+    pPropBag->Write(OLESTR("StartTime"), &value);
+    VariantClear(&value);
+
+    V_VT(&value) = VT_BSTR;
+    V_BSTR(&value) = SysAllocStringLen(_p_instance->getBaseURL(),
+                            SysStringLen(_p_instance->getBaseURL()));
+    pPropBag->Write(OLESTR("BaseURL"), &value);
+    VariantClear(&value);
+
+    if( fClearDirty )
+        _p_instance->setDirty(FALSE);
 
     return S_OK;
 };
-