xref: /haiku/headers/libs/print/libprint/JobSetupDlg.h (revision de18d919e7c940b402a6e213f7deb21e2f187e22)
1 /*
2  * JobSetupDlg.cpp
3  * Copyright 1999-2000 Y.Takagi. All Rights Reserved.
4  */
5 
6 #ifndef __JOBSETUPDLG_H
7 #define __JOBSETUPDLG_H
8 
9 #include <View.h>
10 #include <map>
11 
12 #include "DialogWindow.h"
13 
14 #include "JobData.h"
15 #include "Halftone.h"
16 #include "JSDSlider.h"
17 #include "PrinterCap.h"
18 
19 class BCheckBox;
20 class BGridLayout;
21 class BPopUpMenu;
22 class BRadioButton;
23 class BTextControl;
24 class BTextView;
25 class HalftoneView;
26 class JobData;
27 class PagesView;
28 class PrinterCap;
29 class PrinterData;
30 
31 class JobSetupView : public BView {
32 public:
33 					JobSetupView(JobData* jobData, PrinterData* printerData,
34 						const PrinterCap* printerCap);
35 	virtual	void	AttachedToWindow();
36 	virtual void	MessageReceived(BMessage* message);
37 			bool	UpdateJobData(bool showPreview);
38 
39 private:
40 			void	UpdateButtonEnabledState();
41 			bool	IsHalftoneConfigurationNeeded();
42 			void	CreateHalftoneConfigurationUI();
43 			void	AddDriverSpecificSettings(BGridLayout* gridLayout, int row);
44 			string	GetDriverSpecificValue(PrinterCap::CapID category,
45 						const char* key);
46 			template<typename Predicate>
47 			void	FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
48 						const BaseCap** capabilities, int count,
49 						Predicate& predicate);
50 			void	FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
51 						PrinterCap::CapID category, int id);
52 			void	FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
53 						const BaseCap** capabilities, int count, int id);
54 			int		GetID(const BaseCap** capabilities, int count,
55 						const char* label, int defaultValue);
56 			BRadioButton* CreatePageSelectionItem(const char* name,
57 						const char* label,
58 						JobData::PageSelection pageSelection);
59 			void	AllowOnlyDigits(BTextView* textView, int maxDigits);
60 			void	UpdateHalftonePreview();
61 
62 			JobData::Color			Color();
63 			Halftone::DitherType	DitherType();
64 			float					Gamma();
65 			float					InkDensity();
66 			JobData::PaperSource	PaperSource();
67 
68 	BTextControl*		fCopies;
69 	BTextControl*		fFromPage;
70 	BTextControl*		fToPage;
71 	JobData*			fJobData;
72 	PrinterData*		fPrinterData;
73 	const PrinterCap*	fPrinterCap;
74 	BPopUpMenu*			fColorType;
75 	BPopUpMenu*			fDitherType;
76 	BMenuField*			fDitherMenuField;
77 	JSDSlider*			fGamma;
78 	JSDSlider*			fInkDensity;
79 	HalftoneView*		fHalftone;
80 	BBox*				fHalftoneBox;
81 	BRadioButton*		fAll;
82 	BCheckBox*			fCollate;
83 	BCheckBox*			fReverse;
84 	PagesView*			fPages;
85 	BPopUpMenu*			fPaperFeed;
86 	BCheckBox*			fDuplex;
87 	BPopUpMenu*			fNup;
88 	BRadioButton*		fAllPages;
89 	BRadioButton*		fOddNumberedPages;
90 	BRadioButton*		fEvenNumberedPages;
91 	std::map<PrinterCap::CapID, BPopUpMenu*> fDriverSpecificLists;
92 };
93 
94 class JobSetupDlg : public DialogWindow {
95 public:
96 					JobSetupDlg(JobData* jobData, PrinterData* printerData,
97 						const PrinterCap* printerCap);
98 	virtual	void	MessageReceived(BMessage* message);
99 
100 private:
101 	JobSetupView*	fJobSetup;
102 };
103 
104 #endif	/* __JOBSETUPDLG_H */
105