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 return _p_instance
->onLoad();
188 STDMETHODIMP
VLCPersistPropertyBag::Save(LPPROPERTYBAG pPropBag
, BOOL fClearDirty
, BOOL fSaveAllProperties
)
190 if( NULL
== pPropBag
)
197 V_VT(&value
) = VT_BOOL
;
198 V_BOOL(&value
) = _p_instance
->getAutoLoop()? VARIANT_TRUE
: VARIANT_FALSE
;
199 pPropBag
->Write(OLESTR("AutoLoop"), &value
);
200 VariantClear(&value
);
202 V_VT(&value
) = VT_BOOL
;
203 V_BOOL(&value
) = _p_instance
->getAutoPlay()? VARIANT_TRUE
: VARIANT_FALSE
;
204 pPropBag
->Write(OLESTR("AutoPlay"), &value
);
205 VariantClear(&value
);
207 SIZEL size
= _p_instance
->getExtent();
208 V_VT(&value
) = VT_I4
;
209 V_I4(&value
) = size
.cx
;
210 pPropBag
->Write(OLESTR("ExtentWidth"), &value
);
211 V_I4(&value
) = size
.cy
;
212 pPropBag
->Write(OLESTR("ExtentHeight"), &value
);
214 V_VT(&value
) = VT_BSTR
;
215 V_BSTR(&value
) = SysAllocStringLen(_p_instance
->getMRL(),
216 SysStringLen(_p_instance
->getMRL()));
217 pPropBag
->Write(OLESTR("MRL"), &value
);
218 VariantClear(&value
);
220 V_VT(&value
) = VT_BOOL
;
221 V_BOOL(&value
) = _p_instance
->getVisible()? VARIANT_TRUE
: VARIANT_FALSE
;
222 pPropBag
->Write(OLESTR("Visible"), &value
);
223 VariantClear(&value
);
225 V_VT(&value
) = VT_I4
;
226 V_I4(&value
) = _p_instance
->getVolume();
227 pPropBag
->Write(OLESTR("Volume"), &value
);
228 VariantClear(&value
);
230 V_VT(&value
) = VT_I4
;
231 V_I4(&value
) = _p_instance
->getStartTime();
232 pPropBag
->Write(OLESTR("StartTime"), &value
);
233 VariantClear(&value
);
235 V_VT(&value
) = VT_BSTR
;
236 V_BSTR(&value
) = SysAllocStringLen(_p_instance
->getBaseURL(),
237 SysStringLen(_p_instance
->getBaseURL()));
238 pPropBag
->Write(OLESTR("BaseURL"), &value
);
239 VariantClear(&value
);
242 _p_instance
->setDirty(FALSE
);