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 16 namespace cloud_devices { 17 18 namespace printer { 19 20 typedef std::string ContentType; 21 22 enum DocumentSheetBack { NORMAL, ROTATED, MANUAL_TUMBLE, FLIPPED }; 23 24 struct PwgRasterConfig { 25 PwgRasterConfig(); 26 27 DocumentSheetBack document_sheet_back; 28 bool reverse_order_streaming; 29 bool rotate_all_pages; 30 }; 31 32 enum ColorType { 33 STANDARD_COLOR, 34 STANDARD_MONOCHROME, 35 CUSTOM_COLOR, 36 CUSTOM_MONOCHROME, 37 AUTO_COLOR, 38 }; 39 40 struct 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 53 enum DuplexType { 54 NO_DUPLEX, 55 LONG_EDGE, 56 SHORT_EDGE, 57 }; 58 59 enum OrientationType { 60 PORTRAIT, 61 LANDSCAPE, 62 AUTO_ORIENTATION, 63 }; 64 65 enum MarginsType { 66 NO_MARGINS, 67 STANDARD_MARGINS, 68 CUSTOM_MARGINS, 69 }; 70 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); 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 89 struct 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 101 enum FitToPageType { 102 NO_FITTING, 103 FIT_TO_PAGE, 104 GROW_TO_PAGE, 105 SHRINK_TO_PAGE, 106 FILL_PAGE, 107 }; 108 109 enum 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 287 struct 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 313 struct 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 325 typedef std::vector<Interval> PageRange; 326 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; 339 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; 355 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; 369 370 } // namespace printer 371 372 } // namespace cloud_devices 373 374 #endif // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_ 375