Roll src/third_party/WebKit f36d5e0:68b67cd (svn 193299:193303)
[chromium-blink-merge.git] / components / cloud_devices / common / printer_description.h
blobc3ceee8c92f17b6bae500bfa872d56f64331bf60
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
6 #define COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
8 #include <string>
10 #include "base/logging.h"
11 #include "components/cloud_devices/common/description_items.h"
13 // Defines printer options, CDD and CJT items.
14 // https://developers.google.com/cloud-print/docs/cdd
16 namespace cloud_devices {
18 namespace printer {
20 typedef std::string ContentType;
22 enum DocumentSheetBack { NORMAL, ROTATED, MANUAL_TUMBLE, FLIPPED };
24 struct PwgRasterConfig {
25 PwgRasterConfig();
27 DocumentSheetBack document_sheet_back;
28 bool reverse_order_streaming;
29 bool rotate_all_pages;
32 enum ColorType {
33 STANDARD_COLOR,
34 STANDARD_MONOCHROME,
35 CUSTOM_COLOR,
36 CUSTOM_MONOCHROME,
37 AUTO_COLOR,
40 struct Color {
41 Color();
42 explicit Color(ColorType type);
44 bool IsValid() const;
45 bool operator==(const Color& other) const;
46 bool operator!=(const Color& other) const { return !(*this == other); }
48 ColorType type;
49 std::string vendor_id;
50 std::string custom_display_name;
53 enum DuplexType {
54 NO_DUPLEX,
55 LONG_EDGE,
56 SHORT_EDGE,
59 enum OrientationType {
60 PORTRAIT,
61 LANDSCAPE,
62 AUTO_ORIENTATION,
65 enum MarginsType {
66 NO_MARGINS,
67 STANDARD_MARGINS,
68 CUSTOM_MARGINS,
71 struct Margins {
72 Margins();
73 Margins(MarginsType type,
74 int32 top_um,
75 int32 right_um,
76 int32 bottom_um,
77 int32 left_um);
79 bool operator==(const Margins& other) const;
80 bool operator!=(const Margins& other) const { return !(*this == other); }
82 MarginsType type;
83 int32 top_um;
84 int32 right_um;
85 int32 bottom_um;
86 int32 left_um;
89 struct Dpi {
90 Dpi();
91 Dpi(int32 horizontal, int32 vertical);
93 bool IsValid() const;
94 bool operator==(const Dpi& other) const;
95 bool operator!=(const Dpi& other) const { return !(*this == other); }
97 int32 horizontal;
98 int32 vertical;
101 enum FitToPageType {
102 NO_FITTING,
103 FIT_TO_PAGE,
104 GROW_TO_PAGE,
105 SHRINK_TO_PAGE,
106 FILL_PAGE,
109 enum MediaType {
110 CUSTOM_MEDIA,
112 // North American standard sheet media names.
113 NA_INDEX_3X5,
114 NA_PERSONAL,
115 NA_MONARCH,
116 NA_NUMBER_9,
117 NA_INDEX_4X6,
118 NA_NUMBER_10,
119 NA_A2,
120 NA_NUMBER_11,
121 NA_NUMBER_12,
122 NA_5X7,
123 NA_INDEX_5X8,
124 NA_NUMBER_14,
125 NA_INVOICE,
126 NA_INDEX_4X6_EXT,
127 NA_6X9,
128 NA_C5,
129 NA_7X9,
130 NA_EXECUTIVE,
131 NA_GOVT_LETTER,
132 NA_GOVT_LEGAL,
133 NA_QUARTO,
134 NA_LETTER,
135 NA_FANFOLD_EUR,
136 NA_LETTER_PLUS,
137 NA_FOOLSCAP,
138 NA_LEGAL,
139 NA_SUPER_A,
140 NA_9X11,
141 NA_ARCH_A,
142 NA_LETTER_EXTRA,
143 NA_LEGAL_EXTRA,
144 NA_10X11,
145 NA_10X13,
146 NA_10X14,
147 NA_10X15,
148 NA_11X12,
149 NA_EDP,
150 NA_FANFOLD_US,
151 NA_11X15,
152 NA_LEDGER,
153 NA_EUR_EDP,
154 NA_ARCH_B,
155 NA_12X19,
156 NA_B_PLUS,
157 NA_SUPER_B,
158 NA_C,
159 NA_ARCH_C,
160 NA_D,
161 NA_ARCH_D,
162 NA_ASME_F,
163 NA_WIDE_FORMAT,
164 NA_E,
165 NA_ARCH_E,
166 NA_F,
168 // Chinese standard sheet media size names.
169 ROC_16K,
170 ROC_8K,
171 PRC_32K,
172 PRC_1,
173 PRC_2,
174 PRC_4,
175 PRC_5,
176 PRC_8,
177 PRC_6,
178 PRC_3,
179 PRC_16K,
180 PRC_7,
181 OM_JUURO_KU_KAI,
182 OM_PA_KAI,
183 OM_DAI_PA_KAI,
184 PRC_10,
186 // ISO standard sheet media size names.
187 ISO_A10,
188 ISO_A9,
189 ISO_A8,
190 ISO_A7,
191 ISO_A6,
192 ISO_A5,
193 ISO_A5_EXTRA,
194 ISO_A4,
195 ISO_A4_TAB,
196 ISO_A4_EXTRA,
197 ISO_A3,
198 ISO_A4X3,
199 ISO_A4X4,
200 ISO_A4X5,
201 ISO_A4X6,
202 ISO_A4X7,
203 ISO_A4X8,
204 ISO_A4X9,
205 ISO_A3_EXTRA,
206 ISO_A2,
207 ISO_A3X3,
208 ISO_A3X4,
209 ISO_A3X5,
210 ISO_A3X6,
211 ISO_A3X7,
212 ISO_A1,
213 ISO_A2X3,
214 ISO_A2X4,
215 ISO_A2X5,
216 ISO_A0,
217 ISO_A1X3,
218 ISO_A1X4,
219 ISO_2A0,
220 ISO_A0X3,
221 ISO_B10,
222 ISO_B9,
223 ISO_B8,
224 ISO_B7,
225 ISO_B6,
226 ISO_B6C4,
227 ISO_B5,
228 ISO_B5_EXTRA,
229 ISO_B4,
230 ISO_B3,
231 ISO_B2,
232 ISO_B1,
233 ISO_B0,
234 ISO_C10,
235 ISO_C9,
236 ISO_C8,
237 ISO_C7,
238 ISO_C7C6,
239 ISO_C6,
240 ISO_C6C5,
241 ISO_C5,
242 ISO_C4,
243 ISO_C3,
244 ISO_C2,
245 ISO_C1,
246 ISO_C0,
247 ISO_DL,
248 ISO_RA2,
249 ISO_SRA2,
250 ISO_RA1,
251 ISO_SRA1,
252 ISO_RA0,
253 ISO_SRA0,
255 // Japanese standard sheet media size names.
256 JIS_B10,
257 JIS_B9,
258 JIS_B8,
259 JIS_B7,
260 JIS_B6,
261 JIS_B5,
262 JIS_B4,
263 JIS_B3,
264 JIS_B2,
265 JIS_B1,
266 JIS_B0,
267 JIS_EXEC,
268 JPN_CHOU4,
269 JPN_HAGAKI,
270 JPN_YOU4,
271 JPN_CHOU2,
272 JPN_CHOU3,
273 JPN_OUFUKU,
274 JPN_KAHU,
275 JPN_KAKU2,
277 // Other metric standard sheet media size names.
278 OM_SMALL_PHOTO,
279 OM_ITALIAN,
280 OM_POSTFIX,
281 OM_LARGE_PHOTO,
282 OM_FOLIO,
283 OM_FOLIO_SP,
284 OM_INVITE,
287 struct Media {
288 Media();
290 explicit Media(MediaType type);
292 Media(MediaType type, int32 width_um, int32 height_um);
294 Media(const std::string& custom_display_name,
295 const std::string& vendor_id,
296 int32 width_um,
297 int32 height_um);
299 bool MatchBySize();
301 bool IsValid() const;
302 bool operator==(const Media& other) const;
303 bool operator!=(const Media& other) const { return !(*this == other); }
305 MediaType type;
306 int32 width_um;
307 int32 height_um;
308 bool is_continuous_feed;
309 std::string custom_display_name;
310 std::string vendor_id;
313 struct Interval {
314 Interval();
315 Interval(int32 start, int32 end);
316 Interval(int32 start);
318 bool operator==(const Interval& other) const;
319 bool operator!=(const Interval& other) const { return !(*this == other); }
321 int32 start;
322 int32 end;
325 typedef std::vector<Interval> PageRange;
327 class ContentTypeTraits;
328 class PwgRasterConfigTraits;
329 class ColorTraits;
330 class DuplexTraits;
331 class OrientationTraits;
332 class MarginsTraits;
333 class DpiTraits;
334 class FitToPageTraits;
335 class MediaTraits;
336 class CopiesTraits;
337 class PageRangeTraits;
338 class CollateTraits;
340 typedef ListCapability<ContentType, ContentTypeTraits> ContentTypesCapability;
341 typedef ValueCapability<PwgRasterConfig, PwgRasterConfigTraits>
342 PwgRasterConfigCapability;
343 typedef SelectionCapability<Color, ColorTraits> ColorCapability;
344 typedef SelectionCapability<DuplexType, DuplexTraits> DuplexCapability;
345 typedef SelectionCapability<OrientationType, OrientationTraits>
346 OrientationCapability;
347 typedef SelectionCapability<Margins, MarginsTraits> MarginsCapability;
348 typedef SelectionCapability<Dpi, DpiTraits> DpiCapability;
349 typedef SelectionCapability<FitToPageType, FitToPageTraits> FitToPageCapability;
350 typedef SelectionCapability<Media, MediaTraits> MediaCapability;
351 typedef EmptyCapability<class CopiesTraits> CopiesCapability;
352 typedef EmptyCapability<class PageRangeTraits> PageRangeCapability;
353 typedef BooleanCapability<class CollateTraits> CollateCapability;
354 typedef BooleanCapability<class ReverseTraits> ReverseCapability;
356 typedef TicketItem<PwgRasterConfig, PwgRasterConfigTraits>
357 PwgRasterConfigTicketItem;
358 typedef TicketItem<Color, ColorTraits> ColorTicketItem;
359 typedef TicketItem<DuplexType, DuplexTraits> DuplexTicketItem;
360 typedef TicketItem<OrientationType, OrientationTraits> OrientationTicketItem;
361 typedef TicketItem<Margins, MarginsTraits> MarginsTicketItem;
362 typedef TicketItem<Dpi, DpiTraits> DpiTicketItem;
363 typedef TicketItem<FitToPageType, FitToPageTraits> FitToPageTicketItem;
364 typedef TicketItem<Media, MediaTraits> MediaTicketItem;
365 typedef TicketItem<int32, CopiesTraits> CopiesTicketItem;
366 typedef TicketItem<PageRange, PageRangeTraits> PageRangeTicketItem;
367 typedef TicketItem<bool, CollateTraits> CollateTicketItem;
368 typedef TicketItem<bool, ReverseTraits> ReverseTicketItem;
370 } // namespace printer
372 } // namespace cloud_devices
374 #endif // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_