xref: /haiku/src/libs/print/libprint/PrinterCap.cpp (revision 4410ee1269f6a039e1c1060feb105ce40c8152dc)
1 /*
2  * PrinterCap.cpp
3  * Copyright 1999-2000 Y.Takagi. All Rights Reserved.
4  */
5 
6 #include "PrinterCap.h"
7 #include "PrinterData.h"
8 
BaseCap(const string & label)9 BaseCap::BaseCap(const string &label)
10 	:
11 	fLabel(label)
12 {
13 }
14 
15 
~BaseCap()16 BaseCap::~BaseCap()
17 {
18 }
19 
20 
21 const char*
Label() const22 BaseCap::Label() const
23 {
24 	return fLabel.c_str();
25 }
26 
27 
EnumCap(const string & label,bool isDefault)28 EnumCap::EnumCap(const string &label, bool isDefault)
29 	:
30 	BaseCap(label),
31 	fIsDefault(isDefault)
32 {
33 }
34 
35 
36 const char*
Key() const37 EnumCap::Key() const
38 {
39 	return fKey.c_str();
40 }
41 
42 
PaperCap(const string & label,bool isDefault,JobData::Paper paper,const BRect & paperRect,const BRect & physicalRect)43 PaperCap::PaperCap(const string &label, bool isDefault, JobData::Paper paper,
44 	const BRect &paperRect, const BRect &physicalRect)
45 	:
46 	EnumCap(label, isDefault),
47 	fPaper(paper),
48 	fPaperRect(paperRect),
49 	fPhysicalRect(physicalRect)
50 {
51 }
52 
53 
54 int32
ID() const55 PaperCap::ID() const
56 {
57 	return fPaper;
58 }
59 
60 
PaperSourceCap(const string & label,bool isDefault,JobData::PaperSource paperSource)61 PaperSourceCap::PaperSourceCap(const string &label, bool isDefault,
62 	JobData::PaperSource paperSource)
63 	:
64 	EnumCap(label, isDefault),
65 	fPaperSource(paperSource)
66 {
67 }
68 
69 
70 int32
ID() const71 PaperSourceCap::ID() const
72 {
73 	return fPaperSource;
74 }
75 
76 
ResolutionCap(const string & label,bool isDefault,int32 id,int xResolution,int yResolution)77 ResolutionCap::ResolutionCap(const string &label, bool isDefault,
78 	int32 id, int xResolution, int yResolution)
79 	:
80 	EnumCap(label, isDefault),
81 	fID(id),
82 	fXResolution(xResolution),
83 	fYResolution(yResolution)
84 {
85 }
86 
87 
88 int32
ID() const89 ResolutionCap::ID() const
90 {
91 	return fID;
92 }
93 
94 
OrientationCap(const string & label,bool isDefault,JobData::Orientation orientation)95 OrientationCap::OrientationCap(const string &label, bool isDefault,
96 	JobData::Orientation orientation)
97 	:
98 	EnumCap(label, isDefault),
99 	fOrientation(orientation)
100 {
101 }
102 
103 
104 int32
ID() const105 OrientationCap::ID() const
106 {
107 	return fOrientation;
108 }
109 
110 
PrintStyleCap(const string & label,bool isDefault,JobData::PrintStyle printStyle)111 PrintStyleCap::PrintStyleCap(const string &label, bool isDefault,
112 	JobData::PrintStyle printStyle)
113 	:
114 	EnumCap(label, isDefault),
115 	fPrintStyle(printStyle)
116 {
117 }
118 
119 
120 int32
ID() const121 PrintStyleCap::ID() const
122 {
123 	return fPrintStyle;
124 }
125 
126 
BindingLocationCap(const string & label,bool isDefault,JobData::BindingLocation bindingLocation)127 BindingLocationCap::BindingLocationCap(const string &label, bool isDefault,
128 	JobData::BindingLocation bindingLocation)
129 	:
130 	EnumCap(label, isDefault),
131 	fBindingLocation(bindingLocation)
132 {
133 }
134 
135 
136 int32
ID() const137 BindingLocationCap::ID() const
138 {
139 	return fBindingLocation;
140 }
141 
142 
ColorCap(const string & label,bool isDefault,JobData::Color color)143 ColorCap::ColorCap(const string &label, bool isDefault, JobData::Color color)
144 	:
145 	EnumCap(label, isDefault),
146 	fColor(color)
147 {
148 }
149 
150 
151 int32
ID() const152 ColorCap::ID() const
153 {
154 	return fColor;
155 }
156 
157 
ProtocolClassCap(const string & label,bool isDefault,int32 protocolClass,const string & description)158 ProtocolClassCap::ProtocolClassCap(const string &label, bool isDefault,
159 	int32 protocolClass, const string &description)
160 	:
161 	EnumCap(label, isDefault),
162 	fProtocolClass(protocolClass),
163 	fDescription(description)
164 {
165 }
166 
167 
168 int32
ID() const169 ProtocolClassCap::ID() const
170 {
171 	return fProtocolClass;
172 }
173 
174 
DriverSpecificCap(const string & label,int32 category,Type type)175 DriverSpecificCap::DriverSpecificCap(const string& label, int32 category,
176 	Type type)
177 	:
178 	EnumCap(label, false),
179 	fCategory(category),
180 	fType(type)
181 {
182 }
183 
184 
185 int32
ID() const186 DriverSpecificCap::ID() const
187 {
188 	return fCategory;
189 }
190 
191 
ListItemCap(const string & label,bool isDefault,int32 id)192 ListItemCap::ListItemCap(const string& label, bool isDefault, int32 id)
193 	:
194 	EnumCap(label, isDefault),
195 	fID(id)
196 {
197 }
198 
199 
200 int32
ID() const201 ListItemCap::ID() const
202 {
203 	return fID;
204 }
205 
206 
BooleanCap(const string & label,bool defaultValue)207 BooleanCap::BooleanCap(const string& label, bool defaultValue)
208 	:
209 	BaseCap(label),
210 	fDefaultValue(defaultValue)
211 {
212 }
213 
214 
215 bool
DefaultValue() const216 BooleanCap::DefaultValue() const
217 {
218 	return fDefaultValue;
219 }
220 
221 
IntRangeCap(const string & label,int lower,int upper,int defaultValue)222 IntRangeCap::IntRangeCap(const string& label, int lower, int upper,
223 	int defaultValue)
224 	:
225 	BaseCap(label),
226 	fLower(lower),
227 	fUpper(upper),
228 	fDefaultValue(defaultValue)
229 {
230 }
231 
232 
233 int32
Lower() const234 IntRangeCap::Lower() const
235 {
236 	return fLower;
237 }
238 
239 
240 int32
Upper() const241 IntRangeCap::Upper() const
242 {
243 	return fUpper;
244 }
245 
246 
247 int32
DefaultValue() const248 IntRangeCap::DefaultValue() const
249 {
250 	return fDefaultValue;
251 }
252 
253 
DoubleRangeCap(const string & label,double lower,double upper,double defaultValue)254 DoubleRangeCap::DoubleRangeCap(const string& label, double lower, double upper,
255 	double defaultValue)
256 	:
257 	BaseCap(label),
258 	fLower(lower),
259 	fUpper(upper),
260 	fDefaultValue(defaultValue)
261 {
262 }
263 
264 
265 double
Lower() const266 DoubleRangeCap::Lower() const
267 {
268 	return fLower;
269 }
270 
271 
272 double
Upper() const273 DoubleRangeCap::Upper() const
274 {
275 	return fUpper;
276 }
277 
278 
279 double
DefaultValue() const280 DoubleRangeCap::DefaultValue() const
281 {
282 	return fDefaultValue;
283 }
284 
285 
PrinterCap(const PrinterData * printer_data)286 PrinterCap::PrinterCap(const PrinterData *printer_data)
287 	:
288 	fPrinterData(printer_data)
289 {
290 }
291 
292 
~PrinterCap()293 PrinterCap::~PrinterCap()
294 {
295 }
296 
297 
298 const EnumCap*
GetDefaultCap(CapID category) const299 PrinterCap::GetDefaultCap(CapID category) const
300 {
301 	int count = CountCap(category);
302 	if (count <= 0)
303 		return NULL;
304 
305 	const BaseCap **base_cap = GetCaps(category);
306 	while (count--) {
307 		const EnumCap* enumCap = dynamic_cast<const EnumCap*>(*base_cap);
308 		if (enumCap == NULL)
309 			return NULL;
310 
311 		if (enumCap->fIsDefault) {
312 			return enumCap;
313 		}
314 
315 		base_cap++;
316 	}
317 
318 	return static_cast<const EnumCap*>(GetCaps(category)[0]);
319 }
320 
321 
322 template<typename Predicate>
323 const BaseCap*
FindCap(CapID category,Predicate & predicate) const324 PrinterCap::FindCap(CapID category, Predicate& predicate) const
325 {
326 	int count = CountCap(category);
327 	if (count <= 0)
328 		return NULL;
329 
330 	const BaseCap **base_cap = GetCaps(category);
331 	while (count--) {
332 		if (predicate(*base_cap)) {
333 			return *base_cap;
334 		}
335 		base_cap++;
336 	}
337 	return NULL;
338 
339 }
340 
341 const EnumCap*
FindCap(CapID category,int id) const342 PrinterCap::FindCap(CapID category, int id) const
343 {
344 	IDPredicate predicate(id);
345 	return static_cast<const EnumCap*>(FindCap(category, predicate));
346 }
347 
348 
349 const BaseCap*
FindCap(CapID category,const char * label) const350 PrinterCap::FindCap(CapID category, const char* label) const
351 {
352 	LabelPredicate predicate(label);
353 	return FindCap(category, predicate);
354 }
355 
356 
357 const EnumCap*
FindCapWithKey(CapID category,const char * key) const358 PrinterCap::FindCapWithKey(CapID category, const char* key) const
359 {
360 	KeyPredicate predicate(key);
361 	return static_cast<const EnumCap*>(FindCap(category, predicate));
362 }
363 
364 
365 const BooleanCap*
FindBooleanCap(CapID category) const366 PrinterCap::FindBooleanCap(CapID category) const
367 {
368 	if (CountCap(category) != 1)
369 		return NULL;
370 	return dynamic_cast<const BooleanCap*>(GetCaps(category)[0]);
371 }
372 
373 
374 const IntRangeCap*
FindIntRangeCap(CapID category) const375 PrinterCap::FindIntRangeCap(CapID category) const
376 {
377 	if (CountCap(category) != 1)
378 		return NULL;
379 	return dynamic_cast<const IntRangeCap*>(GetCaps(category)[0]);
380 }
381 
382 
383 const DoubleRangeCap*
FindDoubleRangeCap(CapID category) const384 PrinterCap::FindDoubleRangeCap(CapID category) const
385 {
386 	if (CountCap(category) != 1)
387 		return NULL;
388 	return dynamic_cast<const DoubleRangeCap*>(GetCaps(category)[0]);
389 }
390 
391 
392 int
GetProtocolClass() const393 PrinterCap::GetProtocolClass() const {
394 	return fPrinterData->GetProtocolClass();
395 }
396 
397 
398 const PrinterData*
GetPrinterData() const399 PrinterCap::GetPrinterData() const
400 {
401 	return fPrinterData;
402 }
403