printer_description.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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.
4
5#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
6#define COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
7
8#include <string>
9
10#include "base/logging.h"
11#include "components/cloud_devices/common/description_items.h"
12
13// Defines printer options, CDD and CJT items.
14// https://developers.google.com/cloud-print/docs/cdd
15
16namespace cloud_devices {
17
18namespace printer {
19
20typedef std::string ContentType;
21
22enum DocumentSheetBack { NORMAL, ROTATED, MANUAL_TUMBLE, FLIPPED };
23
24struct PwgRasterConfig {
25  PwgRasterConfig();
26
27  DocumentSheetBack document_sheet_back;
28  bool reverse_order_streaming;
29  bool rotate_all_pages;
30};
31
32enum ColorType {
33  STANDARD_COLOR,
34  STANDARD_MONOCHROME,
35  CUSTOM_COLOR,
36  CUSTOM_MONOCHROME,
37  AUTO_COLOR,
38};
39
40struct Color {
41  Color();
42  explicit Color(ColorType type);
43
44  bool IsValid() const;
45  bool operator==(const Color& other) const;
46  bool operator!=(const Color& other) const { return !(*this == other); }
47
48  ColorType type;
49  std::string vendor_id;
50  std::string custom_display_name;
51};
52
53enum DuplexType {
54  NO_DUPLEX,
55  LONG_EDGE,
56  SHORT_EDGE,
57};
58
59enum OrientationType {
60  PORTRAIT,
61  LANDSCAPE,
62  AUTO_ORIENTATION,
63};
64
65enum MarginsType {
66  NO_MARGINS,
67  STANDARD_MARGINS,
68  CUSTOM_MARGINS,
69};
70
71struct Margins {
72  Margins();
73  Margins(MarginsType type,
74          int32 top_um,
75          int32 right_um,
76          int32 bottom_um,
77          int32 left_um);
78
79  bool operator==(const Margins& other) const;
80  bool operator!=(const Margins& other) const { return !(*this == other); }
81
82  MarginsType type;
83  int32 top_um;
84  int32 right_um;
85  int32 bottom_um;
86  int32 left_um;
87};
88
89struct Dpi {
90  Dpi();
91  Dpi(int32 horizontal, int32 vertical);
92
93  bool IsValid() const;
94  bool operator==(const Dpi& other) const;
95  bool operator!=(const Dpi& other) const { return !(*this == other); }
96
97  int32 horizontal;
98  int32 vertical;
99};
100
101enum FitToPageType {
102  NO_FITTING,
103  FIT_TO_PAGE,
104  GROW_TO_PAGE,
105  SHRINK_TO_PAGE,
106  FILL_PAGE,
107};
108
109enum MediaType {
110  CUSTOM_MEDIA,
111
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,
167
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,
185
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,
254
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,
276
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,
285};
286
287struct Media {
288  Media();
289
290  Media(MediaType type, int32 width_um, int32 height_um);
291
292  Media(const std::string& custom_display_name,
293        int32 width_um,
294        int32 height_um);
295
296  bool MatchBySize();
297
298  bool IsValid() const;
299  bool operator==(const Media& other) const;
300  bool operator!=(const Media& other) const { return !(*this == other); }
301
302  MediaType type;
303  int32 width_um;
304  int32 height_um;
305  bool is_continuous_feed;
306  std::string custom_display_name;
307};
308
309struct Interval {
310  Interval();
311  Interval(int32 start, int32 end);
312  Interval(int32 start);
313
314  bool operator==(const Interval& other) const;
315  bool operator!=(const Interval& other) const { return !(*this == other); }
316
317  int32 start;
318  int32 end;
319};
320
321typedef std::vector<Interval> PageRange;
322
323class ContentTypeTraits;
324class PwgRasterConfigTraits;
325class ColorTraits;
326class DuplexTraits;
327class OrientationTraits;
328class MarginsTraits;
329class DpiTraits;
330class FitToPageTraits;
331class MediaTraits;
332class CopiesTraits;
333class PageRangeTraits;
334class CollateTraits;
335
336typedef ListCapability<ContentType, ContentTypeTraits> ContentTypesCapability;
337typedef ValueCapability<PwgRasterConfig, PwgRasterConfigTraits>
338    PwgRasterConfigCapability;
339typedef SelectionCapability<Color, ColorTraits> ColorCapability;
340typedef SelectionCapability<DuplexType, DuplexTraits> DuplexCapability;
341typedef SelectionCapability<OrientationType, OrientationTraits>
342    OrientationCapability;
343typedef SelectionCapability<Margins, MarginsTraits> MarginsCapability;
344typedef SelectionCapability<Dpi, DpiTraits> DpiCapability;
345typedef SelectionCapability<FitToPageType, FitToPageTraits> FitToPageCapability;
346typedef SelectionCapability<Media, MediaTraits> MediaCapability;
347typedef EmptyCapability<class CopiesTraits> CopiesCapability;
348typedef EmptyCapability<class PageRangeTraits> PageRangeCapability;
349typedef BooleanCapability<class CollateTraits> CollateCapability;
350typedef BooleanCapability<class ReverseTraits> ReverseCapability;
351
352typedef TicketItem<PwgRasterConfig, PwgRasterConfigTraits>
353    PwgRasterConfigTicketItem;
354typedef TicketItem<Color, ColorTraits> ColorTicketItem;
355typedef TicketItem<DuplexType, DuplexTraits> DuplexTicketItem;
356typedef TicketItem<OrientationType, OrientationTraits> OrientationTicketItem;
357typedef TicketItem<Margins, MarginsTraits> MarginsTicketItem;
358typedef TicketItem<Dpi, DpiTraits> DpiTicketItem;
359typedef TicketItem<FitToPageType, FitToPageTraits> FitToPageTicketItem;
360typedef TicketItem<Media, MediaTraits> MediaTicketItem;
361typedef TicketItem<int32, CopiesTraits> CopiesTicketItem;
362typedef TicketItem<PageRange, PageRangeTraits> PageRangeTicketItem;
363typedef TicketItem<bool, CollateTraits> CollateTicketItem;
364typedef TicketItem<bool, ReverseTraits> ReverseTicketItem;
365
366}  // namespace printer
367
368}  // namespace cloud_devices
369
370#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
371