1/*
2* Copyright 2010, Haiku. All rights reserved.
3* Distributed under the terms of the MIT License.
4*
5* Authors:
6*		Michael Pfeiffer
7*/
8#ifndef GP_BINDING_H
9#define GP_BINDING_H
10
11
12#include <Bitmap.h>
13#include <Message.h>
14
15#include <list>
16
17#include "GPBand.h"
18#include "GPJob.h"
19#include "GPJobConfiguration.h"
20#include "OutputStream.h"
21#include "ValidRect.h"
22
23class GPCapabilities;
24
25class GPBinding
26{
27public:
28				GPBinding();
29				~GPBinding();
30
31	status_t	GetPrinterManufacturers(BMessage& manufacturers);
32	bool		ExtractManufacturer(const BMessage& manufacturers, int32 index,
33		BString& id, BString& displayName);
34	void		AddManufacturer(BMessage& manufacturers, const char* id,
35		const char* name);
36
37	status_t	GetPrinterModels(const char* manufacturer, BMessage& models);
38	bool 		ExtractModel(const BMessage& models, int32 index,
39		BString& displayName, BString& driver);
40	void		AddModel(BMessage& models, const char* displayName,
41		const char* driver);
42
43	status_t	GetCapabilities(const char* driver,
44					GPCapabilities* capabilities);
45
46	status_t	BeginJob(GPJobConfiguration* configuration,
47		OutputStream* outputStream) /* throw(TransportException) */;
48	void		EndJob() /* throw(TransportException) */;
49	void		BeginPage() /* throw(TransportException) */;
50	void		EndPage() /* throw(TransportException) */;
51	status_t	AddBitmapToPage(BBitmap* bitmap, BRect validRect, BPoint where);
52
53private:
54	void		InitGutenprint();
55	void		DeleteBands();
56
57	bool			fInitialized;
58	OutputStream*	fOutputStream;
59	list<GPBand*>	fBands;
60	GPJob 			fJob;
61};
62
63#endif
64