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