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  explicit Media(MediaType type);
291
292  Media(MediaType type, int32 width_um, int32 height_um);
293
294  Media(const std::string& custom_display_name,
295        const std::string& vendor_id,
296        int32 width_um,
297        int32 height_um);
298
299  bool MatchBySize();
300
301  bool IsValid() const;
302  bool operator==(const Media& other) const;
303  bool operator!=(const Media& other) const { return !(*this == other); }
304
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;
311};
312
313struct Interval {
314  Interval();
315  Interval(int32 start, int32 end);
316  Interval(int32 start);
317
318  bool operator==(const Interval& other) const;
319  bool operator!=(const Interval& other) const { return !(*this == other); }
320
321  int32 start;
322  int32 end;
323};
324
325typedef std::vector<Interval> PageRange;
326
327class ContentTypeTraits;
328class PwgRasterConfigTraits;
329class ColorTraits;
330class DuplexTraits;
331class OrientationTraits;
332class MarginsTraits;
333class DpiTraits;
334class FitToPageTraits;
335class MediaTraits;
336class CopiesTraits;
337class PageRangeTraits;
338class CollateTraits;
339
340typedef ListCapability<ContentType, ContentTypeTraits> ContentTypesCapability;
341typedef ValueCapability<PwgRasterConfig, PwgRasterConfigTraits>
342    PwgRasterConfigCapability;
343typedef SelectionCapability<Color, ColorTraits> ColorCapability;
344typedef SelectionCapability<DuplexType, DuplexTraits> DuplexCapability;
345typedef SelectionCapability<OrientationType, OrientationTraits>
346    OrientationCapability;
347typedef SelectionCapability<Margins, MarginsTraits> MarginsCapability;
348typedef SelectionCapability<Dpi, DpiTraits> DpiCapability;
349typedef SelectionCapability<FitToPageType, FitToPageTraits> FitToPageCapability;
350typedef SelectionCapability<Media, MediaTraits> MediaCapability;
351typedef EmptyCapability<class CopiesTraits> CopiesCapability;
352typedef EmptyCapability<class PageRangeTraits> PageRangeCapability;
353typedef BooleanCapability<class CollateTraits> CollateCapability;
354typedef BooleanCapability<class ReverseTraits> ReverseCapability;
355
356typedef TicketItem<PwgRasterConfig, PwgRasterConfigTraits>
357    PwgRasterConfigTicketItem;
358typedef TicketItem<Color, ColorTraits> ColorTicketItem;
359typedef TicketItem<DuplexType, DuplexTraits> DuplexTicketItem;
360typedef TicketItem<OrientationType, OrientationTraits> OrientationTicketItem;
361typedef TicketItem<Margins, MarginsTraits> MarginsTicketItem;
362typedef TicketItem<Dpi, DpiTraits> DpiTicketItem;
363typedef TicketItem<FitToPageType, FitToPageTraits> FitToPageTicketItem;
364typedef TicketItem<Media, MediaTraits> MediaTicketItem;
365typedef TicketItem<int32, CopiesTraits> CopiesTicketItem;
366typedef TicketItem<PageRange, PageRangeTraits> PageRangeTicketItem;
367typedef TicketItem<bool, CollateTraits> CollateTicketItem;
368typedef TicketItem<bool, ReverseTraits> ReverseTicketItem;
369
370}  // namespace printer
371
372}  // namespace cloud_devices
373
374#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
375