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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 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 V_VT(&value) = VT_I4;
165 if( S_OK == pPropBag->Read(OLESTR("volume"), &value, pErrorLog) )
167 _p_instance->setVolume(V_I4(&value));
168 VariantClear(&value);
171 V_VT(&value) = VT_I4;
172 if( S_OK == pPropBag->Read(OLESTR("starttime"), &value, pErrorLog) )
174 _p_instance->setStartTime(V_I4(&value));
175 VariantClear(&value);
178 V_VT(&value) = VT_BSTR;
179 if( S_OK == pPropBag->Read(OLESTR("baseurl"), &value, pErrorLog) )
181 _p_instance->setBaseURL(V_BSTR(&value));
182 VariantClear(&value);
185 V_VT(&value) = VT_I4;
186 if( S_OK == pPropBag->Read(OLESTR("backcolor"), &value, pErrorLog) )
188 _p_instance->setBackColor(V_I4(&value));
189 VariantClear(&value);
194 ** try alternative syntax
196 V_VT(&value) = VT_BSTR;
197 if( S_OK == pPropBag->Read(OLESTR("bgcolor"), &value, pErrorLog) )
200 if( swscanf(V_BSTR(&value), L"#%lX", &backcolor) )
202 _p_instance->setBackColor(backcolor);
204 VariantClear(&value);
208 return _p_instance->onLoad();
211 STDMETHODIMP VLCPersistPropertyBag::Save(LPPROPERTYBAG pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
213 if( NULL == pPropBag )
220 V_VT(&value) = VT_BOOL;
221 V_BOOL(&value) = _p_instance->getAutoLoop()? VARIANT_TRUE : VARIANT_FALSE;
222 pPropBag->Write(OLESTR("AutoLoop"), &value);
223 VariantClear(&value);
225 V_VT(&value) = VT_BOOL;
226 V_BOOL(&value) = _p_instance->getAutoPlay()? VARIANT_TRUE : VARIANT_FALSE;
227 pPropBag->Write(OLESTR("AutoPlay"), &value);
228 VariantClear(&value);
230 SIZEL size = _p_instance->getExtent();
231 V_VT(&value) = VT_I4;
232 V_I4(&value) = size.cx;
233 pPropBag->Write(OLESTR("ExtentWidth"), &value);
234 V_I4(&value) = size.cy;
235 pPropBag->Write(OLESTR("ExtentHeight"), &value);
237 V_VT(&value) = VT_BSTR;
238 V_BSTR(&value) = SysAllocStringLen(_p_instance->getMRL(),
239 SysStringLen(_p_instance->getMRL()));
240 pPropBag->Write(OLESTR("MRL"), &value);
241 VariantClear(&value);
243 V_VT(&value) = VT_BOOL;
244 V_BOOL(&value) = _p_instance->getVisible()? VARIANT_TRUE : VARIANT_FALSE;
245 pPropBag->Write(OLESTR("Visible"), &value);
246 VariantClear(&value);
248 V_VT(&value) = VT_I4;
249 V_I4(&value) = _p_instance->getVolume();
250 pPropBag->Write(OLESTR("Volume"), &value);
251 VariantClear(&value);
253 V_VT(&value) = VT_I4;
254 V_I4(&value) = _p_instance->getStartTime();
255 pPropBag->Write(OLESTR("StartTime"), &value);
256 VariantClear(&value);
258 V_VT(&value) = VT_BSTR;
259 V_BSTR(&value) = SysAllocStringLen(_p_instance->getBaseURL(),
260 SysStringLen(_p_instance->getBaseURL()));
261 pPropBag->Write(OLESTR("BaseURL"), &value);
262 VariantClear(&value);
264 V_VT(&value) = VT_I4;
265 V_I4(&value) = _p_instance->getBackColor();
266 pPropBag->Write(OLESTR("BackColor"), &value);
267 VariantClear(&value);
270 _p_instance->setDirty(FALSE);