Ejemplo n.º 1
0
static HRESULT WINAPI XMLView_PersistMoniker_GetCurMoniker(
        IPersistMoniker *iface, IMoniker **ppimkName)
{
    XMLView *This = impl_from_IPersistMoniker(iface);
    FIXME("(%p)->(%p)\n", This, ppimkName);
    return E_NOTIMPL;
}
Ejemplo n.º 2
0
static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName,
        LPBC pbc, BOOL fRemember)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);
    FIXME("(%p)->(%p %p %x)\n", This, pimkName, pbc, fRemember);
    return E_NOTIMPL;
}
Ejemplo n.º 3
0
static HRESULT WINAPI XMLView_PersistMoniker_GetClassID(
        IPersistMoniker *iface, CLSID *pClassID)
{
    XMLView *This = impl_from_IPersistMoniker(iface);
    FIXME("(%p)->(%p)\n", This, pClassID);
    return E_NOTIMPL;
}
Ejemplo n.º 4
0
static HRESULT WINAPI XMLView_PersistMoniker_SaveCompleted(
        IPersistMoniker *iface, IMoniker *pimkName, LPBC pibc)
{
    XMLView *This = impl_from_IPersistMoniker(iface);
    FIXME("(%p)->(%p %p)\n", This, pimkName, pibc);
    return E_NOTIMPL;
}
Ejemplo n.º 5
0
static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable,
        IMoniker *pimkName, LPBC pibc, DWORD grfMode)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);
    IMoniker *mon;
    HRESULT hres;

    TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);

    if(pibc) {
        IUnknown *unk = NULL;

        /* FIXME:
         * Use params:
         * "__PrecreatedObject"
         * "BIND_CONTEXT_PARAM"
         * "__HTMLLOADOPTIONS"
         * "__DWNBINDINFO"
         * "URL Context"
         * "_ITransData_Object_"
         * "_EnumFORMATETC_"
         */

        hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, &unk);
        if(SUCCEEDED(hres) && unk) {
            IOleClientSite *client = NULL;

            hres = IUnknown_QueryInterface(unk, &IID_IOleClientSite, (void**)&client);
            if(SUCCEEDED(hres)) {
                TRACE("Got client site %p\n", client);
                IOleObject_SetClientSite(&This->IOleObject_iface, client);
                IOleClientSite_Release(client);
            }

            IUnknown_Release(unk);
        }
    }

    if(This->doc_obj->is_mhtml) {
        IUnknown *unk;

        hres = MimeOleObjectFromMoniker(0, pimkName, pibc, &IID_IUnknown, (void**)&unk, &mon);
        if(FAILED(hres))
            return hres;
        IUnknown_Release(unk);
        pibc = NULL;
    }else {
        IMoniker_AddRef(mon = pimkName);
    }

    prepare_for_binding(This, mon, FALSE);
    call_docview_84(This->doc_obj);
    hres = set_moniker(This->window, mon, NULL, pibc, NULL, TRUE);
    IMoniker_Release(mon);
    if(FAILED(hres))
        return hres;

    return start_binding(This->window->pending_window, (BSCallback*)This->window->pending_window->bscallback, pibc);
}
Ejemplo n.º 6
0
static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);

    TRACE("(%p)\n", This);

    return IPersistStreamInit_IsDirty(&This->IPersistStreamInit_iface);
}
Ejemplo n.º 7
0
static ULONG WINAPI XMLView_PersistMoniker_AddRef(IPersistMoniker *iface)
{
    XMLView *This = impl_from_IPersistMoniker(iface);
    LONG ref = InterlockedIncrement(&This->ref);

    TRACE("(%p)->(%d)\n", This, ref);

    return ref;
}
Ejemplo n.º 8
0
static HRESULT WINAPI PersistMoniker_GetCurMoniker(IPersistMoniker *iface, IMoniker **ppimkName)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);

    TRACE("(%p)->(%p)\n", This, ppimkName);

    if(!This->window || !This->window->mon)
        return E_UNEXPECTED;

    IMoniker_AddRef(This->window->mon);
    *ppimkName = This->window->mon;
    return S_OK;
}
Ejemplo n.º 9
0
static ULONG WINAPI XMLView_PersistMoniker_Release(IPersistMoniker *iface)
{
    XMLView *This = impl_from_IPersistMoniker(iface);
    ULONG ref = InterlockedDecrement(&This->ref);

    TRACE("(%p)->(%d)\n", This, ref);

    if(!ref) {
        if(This->mon)
            IMoniker_Release(This->mon);
        IUnknown_Release(This->html_doc);
        heap_free(This);
    }
    return ref;
}
Ejemplo n.º 10
0
static HRESULT WINAPI XMLView_PersistMoniker_QueryInterface(
        IPersistMoniker *iface, REFIID riid, void **ppvObject)
{
    XMLView *This = impl_from_IPersistMoniker(iface);

    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);

    if(IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IPersistMoniker))
        *ppvObject = &This->IPersistMoniker_iface;
    else if(IsEqualGUID(riid, &IID_IPersistHistory) ||
            IsEqualGUID(riid, &IID_IPersist))
        *ppvObject = &This->IPersistHistory_iface;
    else if(IsEqualGUID(riid, &IID_IOleCommandTarget))
        *ppvObject = &This->IOleCommandTarget_iface;
    else if(IsEqualGUID(riid, &IID_IOleObject))
        *ppvObject = &This->IOleObject_iface;
    else
        return IUnknown_QueryInterface(This->html_doc, riid, ppvObject);

    IPersistMoniker_AddRef(&This->IPersistMoniker_iface);
    return S_OK;
}
Ejemplo n.º 11
0
static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);
    return IPersistFile_GetClassID(&This->IPersistFile_iface, pClassID);
}
Ejemplo n.º 12
0
static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);
    return htmldoc_release(This);
}
Ejemplo n.º 13
0
static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);
    return htmldoc_addref(This);
}
Ejemplo n.º 14
0
static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid, void **ppv)
{
    HTMLDocument *This = impl_from_IPersistMoniker(iface);
    return htmldoc_query_interface(This, riid, ppv);
}
Ejemplo n.º 15
0
static HRESULT WINAPI XMLView_PersistMoniker_Load(IPersistMoniker *iface,
        BOOL fFullyAvailable, IMoniker *pimkName, LPBC pibc, DWORD grfMode)
{
    static const WCHAR XSLParametersW[] = {'X','S','L','P','a','r','a','m','e','t','e','r','s',0};
    static const WCHAR XMLBufferStreamW[] = {'X','M','L','B','u','f','f','e','r','S','t','r','e','a','m',0};
    static const WCHAR DWNBINDINFOW[] = {'_','_','D','W','N','B','I','N','D','I','N','F','O',0};
    static const WCHAR HTMLLOADOPTIONSW[] = {'_','_','H','T','M','L','L','O','A','D','O','P','T','I','O','N','S',0};
    static const WCHAR BSCBHolderW[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };

    XMLView *This = impl_from_IPersistMoniker(iface);
    IPersistMoniker *html_persist_mon;
    IBindStatusCallback *bsc, *bsc_html;
    IBindCtx *bindctx;
    IStream *stream;
    IMoniker *mon;
    IUnknown *unk;
    HRESULT hres;

    TRACE("(%p)->(%x %p %p %x)\n", This, fFullyAvailable, pimkName, pibc, grfMode);

    hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)XSLParametersW, &unk);
    if(SUCCEEDED(hres)) {
        FIXME("ignoring XSLParameters\n");
        IUnknown_Release(unk);
    }
    hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)XMLBufferStreamW, &unk);
    if(SUCCEEDED(hres)) {
        FIXME("ignoring XMLBufferStream\n");
        IUnknown_Release(unk);
    }

    hres = CreateBindCtx(0, &bindctx);
    if(FAILED(hres))
        return hres;

    hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)DWNBINDINFOW, &unk);
    if(SUCCEEDED(hres)) {
        IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)DWNBINDINFOW, unk);
        IUnknown_Release(unk);
    }
    hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)HTMLLOADOPTIONSW, &unk);
    if(SUCCEEDED(hres)) {
        IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)HTMLLOADOPTIONSW, unk);
        IUnknown_Release(unk);
    }
    hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, &unk);
    if(SUCCEEDED(hres)) {
        IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, unk);
        IUnknown_Release(unk);
    }

    hres = CreateStreamOnHGlobal(NULL, TRUE, &stream);
    if(FAILED(hres)) {
        IBindCtx_Release(bindctx);
        return hres;
    }

    if(This->mon)
        IMoniker_Release(This->mon);
    This->mon = pimkName;
    IMoniker_AddRef(This->mon);

    hres = XMLView_Moniker_Create(This->mon, stream, &mon);
    if(FAILED(hres)) {
        IStream_Release(stream);
        IBindCtx_Release(bindctx);
        return hres;
    }

    hres = IUnknown_QueryInterface(This->html_doc,
            &IID_IPersistMoniker, (void**)&html_persist_mon);
    if(FAILED(hres)) {
        IMoniker_Release(mon);
        IStream_Release(stream);
        IBindCtx_Release(bindctx);
        return hres;
    }

    hres = IPersistMoniker_Load(html_persist_mon, FALSE, mon, bindctx, 0);
    IPersistMoniker_Release(html_persist_mon);
    IMoniker_Release(mon);
    if(FAILED(hres)) {
        IStream_Release(stream);
        IBindCtx_Release(bindctx);
        return hres;
    }

    hres = IBindCtx_GetObjectParam(bindctx, (LPOLESTR)BSCBHolderW, &unk);
    IBindCtx_Release(bindctx);
    if(FAILED(hres)) {
        IStream_Release(stream);
        return hres;
    }
    hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&bsc_html);
    IUnknown_Release(unk);
    if(FAILED(hres)) {
        IStream_Release(stream);
        return hres;
    }

    hres = XMLView_BindStatusCallback_Create(bsc_html, This->mon, stream, &bsc);
    IStream_Release(stream);
    if(FAILED(hres)) {
        IBindStatusCallback_OnStopBinding(bsc_html, hres, NULL);
        IBindStatusCallback_Release(bsc_html);
        return hres;
    }

    hres = RegisterBindStatusCallback(pibc, bsc, NULL, 0);
    IBindStatusCallback_Release(bsc);
    if(FAILED(hres)) {
        IBindStatusCallback_OnStopBinding(bsc_html, hres, NULL);
        IBindStatusCallback_Release(bsc_html);
        return hres;
    }

    hres = IMoniker_BindToStorage(pimkName, pibc, NULL,
            &IID_IStream, (void**)&stream);
    if(FAILED(hres)) {
        IBindStatusCallback_OnStopBinding(bsc_html, hres, NULL);
        IBindStatusCallback_Release(bsc_html);
        return hres;
    }

    if(stream)
        IStream_Release(stream);
    IBindStatusCallback_Release(bsc_html);
    return S_OK;
}
Ejemplo n.º 16
0
static HRESULT WINAPI XMLView_PersistMoniker_IsDirty(IPersistMoniker *iface)
{
    XMLView *This = impl_from_IPersistMoniker(iface);
    FIXME("(%p)\n", This);
    return E_NOTIMPL;
}