summaryrefslogtreecommitdiff
path: root/print/XPSDrvSmpl/src/ui/xdsmplptprov.h
blob: 3286944f0a7de08b660d077f8f240a3277528b99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*++

Copyright (c) 2005 Microsoft Corporation

All rights reserved.

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

File Name:

   xdsmplptprov.h

Abstract:

   Definition of the PrintTicket provider plugin. This is responsible for
   handling PrintTicket features that are too complex for the GPD->PrintTicket
   automapping facility.

--*/

#pragma once

#include "cunknown.h"
#include "schema.h"
#include "ftrdmptcnv.h"

typedef vector<IFeatureDMPTConvert*> DMPTConvCollection;

class CXDSmplPTProvider : public CUnknown<IPrintOemPrintTicketProvider>
{
public:
    CXDSmplPTProvider();

    virtual ~CXDSmplPTProvider();

    //
    // IPrintOemPrintTicketProvider methods
    //
    virtual HRESULT STDMETHODCALLTYPE
    GetSupportedVersions(
        _In_                            HANDLE  hPrinter,
        _Outptr_result_buffer_(*pcVersions) INT*    ppVersions[],
        _Out_                           INT*    pcVersions
        );

    virtual HRESULT STDMETHODCALLTYPE
    BindPrinter(
        _In_                                  HANDLE     hPrinter,
                                              INT        version,
        _Out_                                 POEMPTOPTS pOptions,
        _Out_                                 INT*       pcNamespaces,
        _Outptr_result_buffer_maybenull_(*pcNamespaces) BSTR**     ppNamespaces
        );

    virtual HRESULT STDMETHODCALLTYPE
    PublishPrintTicketHelperInterface(
        _In_ IUnknown* pHelper
        );

    virtual HRESULT STDMETHODCALLTYPE
    QueryDeviceDefaultNamespace(
        _Out_ BSTR* pbstrNamespaceUri
        );

    virtual HRESULT STDMETHODCALLTYPE
    ConvertPrintTicketToDevMode(
        _In_    IXMLDOMDocument2* pPrintTicket,
                ULONG             cbDevmode,
        _Inout_updates_bytes_(cbDevmode)
                PDEVMODE          pDevmode,
                ULONG             cbDrvPrivateSize,
        _Inout_ PVOID             pPrivateDevmode
        );

    virtual HRESULT STDMETHODCALLTYPE
    ConvertDevModeToPrintTicket(
                ULONG             cbDevmode,
        _Inout_updates_bytes_(cbDevmode) 
                PDEVMODE          pDevmode,
                ULONG             cbDrvPrivateSize,
        _Inout_ PVOID             pPrivateDevmode,
        _Inout_ IXMLDOMDocument2* pPrintTicket
        );

    virtual HRESULT STDMETHODCALLTYPE
    CompletePrintCapabilities(
        _In_opt_ IXMLDOMDocument2* pPrintTicket,
        _Inout_  IXMLDOMDocument2* pCapabilities
        );

    virtual HRESULT STDMETHODCALLTYPE
    ExpandIntentOptions(
        _Inout_ IXMLDOMDocument2* pPrintTicket
        );

    virtual HRESULT STDMETHODCALLTYPE
    ValidatePrintTicket(
        _Inout_ IXMLDOMDocument2* pPrintTicket
        );

private:
    HRESULT
    DeleteConverters(
        VOID
        );

    HRESULT
    AddConverter(
        _In_opt_ __drv_aliasesMem IFeatureDMPTConvert* pHandler
        );

private:
    HANDLE                       m_hPrinterCached;

    CComPtr<IPrintCoreHelperUni> m_pCoreHelper;

    DMPTConvCollection           m_vectFtrDMPTConverters;

    CComBSTR                     m_bstrPrivateNS;
};