1 /*****************************************************************************
2 * persistpropbag.cpp: ActiveX control for VLC
3 *****************************************************************************
4 * Copyright (C) 2005 the VideoLAN team
6 * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
21 *****************************************************************************/
24 #include "persistpropbag.h"
27 #include "oleobject.h"
31 STDMETHODIMP VLCPersistPropertyBag::GetClassID(LPCLSID pClsID)
36 *pClsID = _p_instance->getClassID();
41 STDMETHODIMP VLCPersistPropertyBag::InitNew(void)
43 return _p_instance->onInit();
46 STDMETHODIMP VLCPersistPropertyBag::Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog)
48 HRESULT hr = _p_instance->onInit();
52 if( NULL == pPropBag )
57 V_VT(&value) = VT_BSTR;
58 if( S_OK == pPropBag->Read(OLESTR("mrl"), &value, pErrorLog) )
60 _p_instance->setMRL(V_BSTR(&value));
66 ** try alternative syntax
68 V_VT(&value) = VT_BSTR;
69 if( S_OK == pPropBag->Read(OLESTR("src"), &value, pErrorLog) )
71 _p_instance->setMRL(V_BSTR(&value));
76 V_VT(&value) = VT_BSTR;
77 if( S_OK == pPropBag->Read(OLESTR("filename"), &value, pErrorLog) )
79 _p_instance->setMRL(V_BSTR(&value));
85 V_VT(&value) = VT_BOOL;
86 if( S_OK == pPropBag->Read(OLESTR("autoplay"), &value, pErrorLog) )
88 _p_instance->setAutoPlay(V_BOOL(&value) != VARIANT_FALSE);
94 ** try alternative syntax
96 V_VT(&value) = VT_BOOL;
97 if( S_OK == pPropBag->Read(OLESTR("autostart"), &value, pErrorLog) )
99 _p_instance->setAutoPlay(V_BOOL(&value) != VARIANT_FALSE);
100 VariantClear(&value);
104 SIZEL size = _p_instance->getExtent();
105 V_VT(&value) = VT_I4;
106 if( S_OK == pPropBag->Read(OLESTR("extentwidth"), &value, pErrorLog) )
108 size.cx = V_I4(&value);
109 VariantClear(&value);
111 V_VT(&value) = VT_I4;
112 if( S_OK == pPropBag->Read(OLESTR("extentheight"), &value, pErrorLog) )
114 size.cy = V_I4(&value);
115 VariantClear(&value);
117 _p_instance->setExtent(size);
119 V_VT(&value) = VT_BOOL;
120 if( S_OK == pPropBag->Read(OLESTR("autoloop"), &value, pErrorLog) )
122 _p_instance->setAutoLoop(V_BOOL(&value) != VARIANT_FALSE);
123 VariantClear(&value);
128 ** try alternative syntax
130 V_VT(&value) = VT_BOOL;
131 if( S_OK == pPropBag->Read(OLESTR("loop"), &value, pErrorLog) )
133 _p_instance->setAutoLoop(V_BOOL(&value) != VARIANT_FALSE);
134 VariantClear(&value);
138 V_VT(&value) = VT_BOOL;
139 if( S_OK == pPropBag->Read(OLESTR("mute"), &value, pErrorLog) )
141 _p_instance->setMute(V_BOOL(&value) != VARIANT_FALSE);
142 VariantClear(&value);
145 V_VT(&value) = VT_BOOL;
146 if( S_OK == pPropBag->Read(OLESTR("visible"), &value, pErrorLog) )
148 _p_instance->setVisible(V_BOOL(&value) != VARIANT_FALSE);
149 VariantClear(&value);
154 ** try alternative syntax
156 V_VT(&value) = VT_BOOL;
157 if( S_OK == pPropBag->Read(OLESTR("showdisplay"), &value, pErrorLog) )
159 _p_instance->setVisible(V_BOOL(&value) != VARIANT_FALSE);
160 VariantClear(&value);
164 int i_vlc = _p_instance->getVLCObject();
165 V_VT(&value) = VT_I4;
166 if( S_OK == pPropBag->Read(OLESTR("volume"), &value, pErrorLog) )
168 VLC_VolumeSet(i_vlc, V_I4(&value));
169 VariantClear(&value);
171 return _p_instance->onLoad();
174 STDMETHODIMP VLCPersistPropertyBag::Save(LPPROPERTYBAG pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
176 if( NULL == pPropBag )
183 V_VT(&value) = VT_BOOL;
184 V_BOOL(&value) = _p_instance->getAutoLoop()? VARIANT_TRUE : VARIANT_FALSE;
185 pPropBag->Write(OLESTR("AutoLoop"), &value);
186 VariantClear(&value);
188 V_VT(&value) = VT_BOOL;
189 V_BOOL(&value) = _p_instance->getAutoPlay()? VARIANT_TRUE : VARIANT_FALSE;
190 pPropBag->Write(OLESTR("AutoPlay"), &value);
191 VariantClear(&value);
193 SIZEL size = _p_instance->getExtent();
194 V_VT(&value) = VT_I4;
195 V_I4(&value) = size.cx;
196 pPropBag->Write(OLESTR("ExtentWidth"), &value);
197 V_I4(&value) = size.cy;
198 pPropBag->Write(OLESTR("ExtentHeight"), &value);
200 V_VT(&value) = VT_BSTR;
201 V_BSTR(&value) = SysAllocStringLen(_p_instance->getMRL(),
202 SysStringLen(_p_instance->getMRL()));
203 pPropBag->Write(OLESTR("MRL"), &value);
204 VariantClear(&value);
206 V_VT(&value) = VT_BOOL;
207 V_BOOL(&value) = _p_instance->getVisible()? VARIANT_TRUE : VARIANT_FALSE;
208 pPropBag->Write(OLESTR("Visible"), &value);
209 VariantClear(&value);
211 int i_vlc = _p_instance->getVLCObject();
214 V_VT(&value) = VT_I4;
215 V_I4(&value) = VLC_VolumeGet(i_vlc);
216 pPropBag->Write(OLESTR("Volume"), &value);
217 VariantClear(&value);
221 _p_instance->setDirty(FALSE);