* Enable halftone configuration options if requested by printer driver
only. * WIP: Driver specific generic capabilities. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39153 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
2ca94d9be9
commit
308f0e195d
headers/libs/print/libprint
src
add-ons/print/drivers
libs/print/libprint
@ -35,6 +35,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void UpdateButtonEnabledState();
|
void UpdateButtonEnabledState();
|
||||||
|
bool IsHalftoneConfigurationNeeded();
|
||||||
|
void CreateHalftoneConfigurationUI();
|
||||||
void FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
|
void FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
|
||||||
PrinterCap::CapID category, int id);
|
PrinterCap::CapID category, int id);
|
||||||
void FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
|
void FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
|
||||||
@ -44,6 +46,7 @@ private:
|
|||||||
BRadioButton* CreatePageSelectionItem(const char* name, const char* label,
|
BRadioButton* CreatePageSelectionItem(const char* name, const char* label,
|
||||||
JobData::PageSelection pageSelection);
|
JobData::PageSelection pageSelection);
|
||||||
void AllowOnlyDigits(BTextView* textView, int maxDigits);
|
void AllowOnlyDigits(BTextView* textView, int maxDigits);
|
||||||
|
void UpdateHalftonePreview();
|
||||||
JobData::Color Color();
|
JobData::Color Color();
|
||||||
Halftone::DitherType DitherType();
|
Halftone::DitherType DitherType();
|
||||||
float Gamma();
|
float Gamma();
|
||||||
@ -58,9 +61,11 @@ private:
|
|||||||
const PrinterCap *fPrinterCap;
|
const PrinterCap *fPrinterCap;
|
||||||
BPopUpMenu *fColorType;
|
BPopUpMenu *fColorType;
|
||||||
BPopUpMenu *fDitherType;
|
BPopUpMenu *fDitherType;
|
||||||
|
BMenuField *fDitherMenuField;
|
||||||
JSDSlider *fGamma;
|
JSDSlider *fGamma;
|
||||||
JSDSlider *fInkDensity;
|
JSDSlider *fInkDensity;
|
||||||
HalftoneView *fHalftone;
|
HalftoneView *fHalftone;
|
||||||
|
BBox *fHalftoneBox;
|
||||||
BRadioButton *fAll;
|
BRadioButton *fAll;
|
||||||
BCheckBox *fCollate;
|
BCheckBox *fCollate;
|
||||||
BCheckBox *fReverse;
|
BCheckBox *fReverse;
|
||||||
|
@ -21,6 +21,7 @@ struct BaseCap {
|
|||||||
virtual ~BaseCap();
|
virtual ~BaseCap();
|
||||||
|
|
||||||
virtual int ID() const = 0;
|
virtual int ID() const = 0;
|
||||||
|
const char* Key() const;
|
||||||
|
|
||||||
string fLabel;
|
string fLabel;
|
||||||
bool fIsDefault;
|
bool fIsDefault;
|
||||||
@ -108,6 +109,23 @@ struct ProtocolClassCap : public BaseCap {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct DriverSpecificCap : public BaseCap {
|
||||||
|
enum Type {
|
||||||
|
kList,
|
||||||
|
kCheckBox,
|
||||||
|
kRange
|
||||||
|
};
|
||||||
|
|
||||||
|
DriverSpecificCap(const string& label,
|
||||||
|
bool isDefault, int category, Type type);
|
||||||
|
|
||||||
|
int ID() const;
|
||||||
|
|
||||||
|
int fCategory;
|
||||||
|
Type fType;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class PrinterData;
|
class PrinterData;
|
||||||
|
|
||||||
class PrinterCap {
|
class PrinterCap {
|
||||||
@ -124,9 +142,16 @@ public:
|
|||||||
kBindingLocation,
|
kBindingLocation,
|
||||||
kColor,
|
kColor,
|
||||||
kProtocolClass,
|
kProtocolClass,
|
||||||
|
kDriverSpecifcCapababilities,
|
||||||
|
|
||||||
// Static boolean settings follow.
|
// Static boolean settings follow.
|
||||||
// For them isSupport() has to be implemented only.
|
// For them isSupport() has to be implemented only.
|
||||||
kCopyCommand, // supports printer page copy command?
|
kCopyCommand, // supports printer page copy command?
|
||||||
|
kHalftone, // needs the printer driver the configuration
|
||||||
|
// for class Halftone?
|
||||||
|
|
||||||
|
// The driver specific generic capabilities start here
|
||||||
|
kDriverSpecificCapabablitiesBegin = 100
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual int countCap(CapID category) const = 0;
|
virtual int countCap(CapID category) const = 0;
|
||||||
|
@ -155,6 +155,7 @@ Lips3Cap::isSupport(CapID capid) const
|
|||||||
case kResolution:
|
case kResolution:
|
||||||
case kColor:
|
case kColor:
|
||||||
case kCopyCommand:
|
case kCopyCommand:
|
||||||
|
case kHalftone:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -220,6 +220,7 @@ Lips4Cap::isSupport(CapID capid) const
|
|||||||
case kBindingLocation:
|
case kBindingLocation:
|
||||||
case kColor:
|
case kColor:
|
||||||
case kCopyCommand:
|
case kCopyCommand:
|
||||||
|
case kHalftone:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -152,6 +152,7 @@ PCL5Cap::isSupport(CapID capid) const
|
|||||||
case kPaperSource:
|
case kPaperSource:
|
||||||
case kResolution:
|
case kResolution:
|
||||||
case kColor:
|
case kColor:
|
||||||
|
case kHalftone:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -335,6 +335,7 @@ PCL6Cap::isSupport(CapID capid) const
|
|||||||
case kCopyCommand:
|
case kCopyCommand:
|
||||||
case kPrintStyle:
|
case kPrintStyle:
|
||||||
case kProtocolClass:
|
case kProtocolClass:
|
||||||
|
case kHalftone:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -151,6 +151,7 @@ PSCap::isSupport(CapID capid) const
|
|||||||
case kPaperSource:
|
case kPaperSource:
|
||||||
case kResolution:
|
case kResolution:
|
||||||
case kColor:
|
case kColor:
|
||||||
|
case kHalftone:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -133,9 +133,27 @@ JobSetupView::JobSetupView(JobData *job_data, PrinterData *printer_data,
|
|||||||
const PrinterCap *printer_cap)
|
const PrinterCap *printer_cap)
|
||||||
:
|
:
|
||||||
BView("jobSetup", B_WILL_DRAW),
|
BView("jobSetup", B_WILL_DRAW),
|
||||||
|
fCopies(NULL),
|
||||||
|
fFromPage(NULL),
|
||||||
|
fToPage(NULL),
|
||||||
fJobData(job_data),
|
fJobData(job_data),
|
||||||
fPrinterData(printer_data),
|
fPrinterData(printer_data),
|
||||||
fPrinterCap(printer_cap)
|
fPrinterCap(printer_cap),
|
||||||
|
fColorType(NULL),
|
||||||
|
fDitherType(NULL),
|
||||||
|
fGamma(NULL),
|
||||||
|
fInkDensity(NULL),
|
||||||
|
fHalftone(NULL),
|
||||||
|
fAll(NULL),
|
||||||
|
fCollate(NULL),
|
||||||
|
fReverse(NULL),
|
||||||
|
fPages(NULL),
|
||||||
|
fPaperFeed(NULL),
|
||||||
|
fDuplex(NULL),
|
||||||
|
fNup(NULL),
|
||||||
|
fAllPages(NULL),
|
||||||
|
fOddNumberedPages(NULL),
|
||||||
|
fEvenNumberedPages(NULL)
|
||||||
{
|
{
|
||||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||||
}
|
}
|
||||||
@ -182,48 +200,8 @@ JobSetupView::AttachedToWindow()
|
|||||||
BMenuField* colorMenuField = new BMenuField("color", "Color:", fColorType);
|
BMenuField* colorMenuField = new BMenuField("color", "Color:", fColorType);
|
||||||
fColorType->SetTargetForItems(this);
|
fColorType->SetTargetForItems(this);
|
||||||
|
|
||||||
// dither type
|
if (IsHalftoneConfigurationNeeded())
|
||||||
fDitherType = new BPopUpMenu("");
|
CreateHalftoneConfigurationUI();
|
||||||
fDitherType->SetRadioMode(true);
|
|
||||||
FillCapabilityMenu(fDitherType, kMsgQuality, gDitherTypes, sizeof(gDitherTypes) /
|
|
||||||
sizeof(gDitherTypes[0]), fJobData->getDitherType());
|
|
||||||
BMenuField* ditherMenuField = new BMenuField("dithering", "Dot Pattern:",
|
|
||||||
fDitherType);
|
|
||||||
fDitherType->SetTargetForItems(this);
|
|
||||||
|
|
||||||
// halftone preview view
|
|
||||||
BBox* halftoneBox = new BBox("halftoneBox");
|
|
||||||
halftoneBox->SetBorder(B_PLAIN_BORDER);
|
|
||||||
|
|
||||||
// TODO make layout compatible
|
|
||||||
BSize size(240, 14 * 4);
|
|
||||||
BRect rect(0, 0, size.width, size.height);
|
|
||||||
fHalftone = new HalftoneView(rect, "halftone",
|
|
||||||
B_FOLLOW_ALL, B_WILL_DRAW);
|
|
||||||
fHalftone->SetExplicitMinSize(size);
|
|
||||||
fHalftone->SetExplicitMaxSize(size);
|
|
||||||
|
|
||||||
// gamma
|
|
||||||
fGamma = new JSDSlider("gamma", "Gamma", new BMessage(kMsgQuality),
|
|
||||||
-300, 300);
|
|
||||||
|
|
||||||
fGamma->SetLimitLabels("Lighter", "Darker");
|
|
||||||
fGamma->SetValue((int32)(100 * log(fJobData->getGamma()) / log(2.0)));
|
|
||||||
fGamma->SetHashMarks(B_HASH_MARKS_BOTH);
|
|
||||||
fGamma->SetHashMarkCount(7);
|
|
||||||
fGamma->SetModificationMessage(new BMessage(kMsgQuality));
|
|
||||||
fGamma->SetTarget(this);
|
|
||||||
|
|
||||||
// ink density
|
|
||||||
fInkDensity = new JSDSlider("inkDensity", "Ink Usage",
|
|
||||||
new BMessage(kMsgQuality), 0, 127);
|
|
||||||
|
|
||||||
fInkDensity->SetLimitLabels("Min", "Max");
|
|
||||||
fInkDensity->SetValue((int32)fJobData->getInkDensity());
|
|
||||||
fInkDensity->SetHashMarks(B_HASH_MARKS_BOTH);
|
|
||||||
fInkDensity->SetHashMarkCount(10);
|
|
||||||
fInkDensity->SetModificationMessage(new BMessage(kMsgQuality));
|
|
||||||
fInkDensity->SetTarget(this);
|
|
||||||
|
|
||||||
// page range
|
// page range
|
||||||
|
|
||||||
@ -351,21 +329,26 @@ JobSetupView::AttachedToWindow()
|
|||||||
BButton* ok = new BButton("ok", "OK", new BMessage(kMsgOK));
|
BButton* ok = new BButton("ok", "OK", new BMessage(kMsgOK));
|
||||||
ok->MakeDefault(true);
|
ok->MakeDefault(true);
|
||||||
|
|
||||||
BGroupView* halftoneGroup = new BGroupView(B_VERTICAL, 0);
|
if (IsHalftoneConfigurationNeeded()) {
|
||||||
BGroupLayout* halftoneLayout = halftoneGroup->GroupLayout();
|
BGroupView* halftoneGroup = new BGroupView(B_VERTICAL, 0);
|
||||||
halftoneLayout->AddView(fHalftone);
|
BGroupLayout* halftoneLayout = halftoneGroup->GroupLayout();
|
||||||
halftoneBox->AddChild(halftoneGroup);
|
halftoneLayout->AddView(fHalftone);
|
||||||
|
fHalftoneBox->AddChild(halftoneGroup);
|
||||||
|
}
|
||||||
|
|
||||||
BGridView* qualityGrid = new BGridView();
|
BGridView* qualityGrid = new BGridView();
|
||||||
BGridLayout* qualityGridLayout = qualityGrid->GridLayout();
|
BGridLayout* qualityGridLayout = qualityGrid->GridLayout();
|
||||||
qualityGridLayout->AddItem(colorMenuField->CreateLabelLayoutItem(), 0, 0);
|
qualityGridLayout->AddItem(colorMenuField->CreateLabelLayoutItem(), 0, 0);
|
||||||
qualityGridLayout->AddItem(colorMenuField->CreateMenuBarLayoutItem(), 1, 0);
|
qualityGridLayout->AddItem(colorMenuField->CreateMenuBarLayoutItem(), 1, 0);
|
||||||
qualityGridLayout->AddItem(ditherMenuField->CreateLabelLayoutItem(), 0, 1);
|
if (IsHalftoneConfigurationNeeded()) {
|
||||||
qualityGridLayout->AddItem(ditherMenuField->CreateMenuBarLayoutItem(), 1,
|
qualityGridLayout->AddItem(fDitherMenuField->CreateLabelLayoutItem(),
|
||||||
1);
|
0, 1);
|
||||||
qualityGridLayout->AddView(fGamma, 0, 2, 2);
|
qualityGridLayout->AddItem(fDitherMenuField->CreateMenuBarLayoutItem(),
|
||||||
qualityGridLayout->AddView(fInkDensity, 0, 3, 2);
|
1, 1);
|
||||||
qualityGridLayout->AddView(halftoneBox, 0, 4, 2);
|
qualityGridLayout->AddView(fGamma, 0, 2, 2);
|
||||||
|
qualityGridLayout->AddView(fInkDensity, 0, 3, 2);
|
||||||
|
qualityGridLayout->AddView(fHalftoneBox, 0, 4, 2);
|
||||||
|
}
|
||||||
qualityGridLayout->SetSpacing(0, 0);
|
qualityGridLayout->SetSpacing(0, 0);
|
||||||
qualityGridLayout->SetInsets(5, 5, 5, 5);
|
qualityGridLayout->SetInsets(5, 5, 5, 5);
|
||||||
qualityBox->AddChild(qualityGrid);
|
qualityBox->AddChild(qualityGrid);
|
||||||
@ -443,13 +426,75 @@ JobSetupView::AttachedToWindow()
|
|||||||
.SetInsets(0, 0, 0, 0)
|
.SetInsets(0, 0, 0, 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
fHalftone->preview(fJobData->getGamma(), fJobData->getInkDensity(),
|
/* TODO remove
|
||||||
fJobData->getDitherType(), fJobData->getColor() != JobData::kMonochrome);
|
if (IsHalftoneConfigurationNeeded())
|
||||||
|
|
||||||
|
fHalftone->preview(fJobData->getGamma(), fJobData->getInkDensity(),
|
||||||
|
fJobData->getDitherType(),
|
||||||
|
fJobData->getColor() != JobData::kMonochrome);
|
||||||
|
*/
|
||||||
|
UpdateHalftonePreview();
|
||||||
|
|
||||||
UpdateButtonEnabledState();
|
UpdateButtonEnabledState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
JobSetupView::IsHalftoneConfigurationNeeded()
|
||||||
|
{
|
||||||
|
return fPrinterCap->isSupport(PrinterCap::kHalftone);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
JobSetupView::CreateHalftoneConfigurationUI()
|
||||||
|
{
|
||||||
|
// dither type
|
||||||
|
fDitherType = new BPopUpMenu("");
|
||||||
|
fDitherType->SetRadioMode(true);
|
||||||
|
FillCapabilityMenu(fDitherType, kMsgQuality, gDitherTypes,
|
||||||
|
sizeof(gDitherTypes) / sizeof(gDitherTypes[0]),
|
||||||
|
fJobData->getDitherType());
|
||||||
|
fDitherMenuField = new BMenuField("dithering", "Dot Pattern:",
|
||||||
|
fDitherType);
|
||||||
|
fDitherType->SetTargetForItems(this);
|
||||||
|
|
||||||
|
// halftone preview view
|
||||||
|
fHalftoneBox = new BBox("halftoneBox");
|
||||||
|
fHalftoneBox->SetBorder(B_PLAIN_BORDER);
|
||||||
|
|
||||||
|
// TODO make layout compatible
|
||||||
|
BSize size(240, 14 * 4);
|
||||||
|
BRect rect(0, 0, size.width, size.height);
|
||||||
|
fHalftone = new HalftoneView(rect, "halftone",
|
||||||
|
B_FOLLOW_ALL, B_WILL_DRAW);
|
||||||
|
fHalftone->SetExplicitMinSize(size);
|
||||||
|
fHalftone->SetExplicitMaxSize(size);
|
||||||
|
|
||||||
|
// gamma
|
||||||
|
fGamma = new JSDSlider("gamma", "Gamma", new BMessage(kMsgQuality),
|
||||||
|
-300, 300);
|
||||||
|
|
||||||
|
fGamma->SetLimitLabels("Lighter", "Darker");
|
||||||
|
fGamma->SetValue((int32)(100 * log(fJobData->getGamma()) / log(2.0)));
|
||||||
|
fGamma->SetHashMarks(B_HASH_MARKS_BOTH);
|
||||||
|
fGamma->SetHashMarkCount(7);
|
||||||
|
fGamma->SetModificationMessage(new BMessage(kMsgQuality));
|
||||||
|
fGamma->SetTarget(this);
|
||||||
|
|
||||||
|
// ink density
|
||||||
|
fInkDensity = new JSDSlider("inkDensity", "Ink Usage",
|
||||||
|
new BMessage(kMsgQuality), 0, 127);
|
||||||
|
|
||||||
|
fInkDensity->SetLimitLabels("Min", "Max");
|
||||||
|
fInkDensity->SetValue((int32)fJobData->getInkDensity());
|
||||||
|
fInkDensity->SetHashMarks(B_HASH_MARKS_BOTH);
|
||||||
|
fInkDensity->SetHashMarkCount(10);
|
||||||
|
fInkDensity->SetModificationMessage(new BMessage(kMsgQuality));
|
||||||
|
fInkDensity->SetTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
JobSetupView::FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
|
JobSetupView::FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
|
||||||
PrinterCap::CapID category, int id)
|
PrinterCap::CapID category, int id)
|
||||||
@ -472,7 +517,7 @@ JobSetupView::FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
|
|||||||
const BaseCap* capability = *capabilities;
|
const BaseCap* capability = *capabilities;
|
||||||
if (message != kMsgNone)
|
if (message != kMsgNone)
|
||||||
item = new BMenuItem(capability->fLabel.c_str(),
|
item = new BMenuItem(capability->fLabel.c_str(),
|
||||||
new BMessage(kMsgQuality));
|
new BMessage(message));
|
||||||
else
|
else
|
||||||
item = new BMenuItem(capability->fLabel.c_str(), NULL);
|
item = new BMenuItem(capability->fLabel.c_str(), NULL);
|
||||||
|
|
||||||
@ -542,8 +587,7 @@ JobSetupView::MessageReceived(BMessage *msg)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kMsgQuality:
|
case kMsgQuality:
|
||||||
fHalftone->preview(Gamma(), InkDensity(), DitherType(),
|
UpdateHalftonePreview();
|
||||||
Color() != JobData::kMonochrome);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kMsgCollateChanged:
|
case kMsgCollateChanged:
|
||||||
@ -557,6 +601,17 @@ JobSetupView::MessageReceived(BMessage *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
JobSetupView::UpdateHalftonePreview()
|
||||||
|
{
|
||||||
|
if (!IsHalftoneConfigurationNeeded())
|
||||||
|
return;
|
||||||
|
|
||||||
|
fHalftone->preview(Gamma(), InkDensity(), DitherType(),
|
||||||
|
Color() != JobData::kMonochrome);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
JobData::Color
|
JobData::Color
|
||||||
JobSetupView::Color()
|
JobSetupView::Color()
|
||||||
{
|
{
|
||||||
@ -613,9 +668,11 @@ JobSetupView::UpdateJobData(bool showPreview)
|
|||||||
{
|
{
|
||||||
fJobData->setShowPreview(showPreview);
|
fJobData->setShowPreview(showPreview);
|
||||||
fJobData->setColor(Color());
|
fJobData->setColor(Color());
|
||||||
fJobData->setGamma(Gamma());
|
if (IsHalftoneConfigurationNeeded()) {
|
||||||
fJobData->setInkDensity(InkDensity());
|
fJobData->setGamma(Gamma());
|
||||||
fJobData->setDitherType(DitherType());
|
fJobData->setInkDensity(InkDensity());
|
||||||
|
fJobData->setDitherType(DitherType());
|
||||||
|
}
|
||||||
|
|
||||||
int first_page;
|
int first_page;
|
||||||
int last_page;
|
int last_page;
|
||||||
|
@ -19,6 +19,13 @@ BaseCap::~BaseCap()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char*
|
||||||
|
BaseCap::Key() const
|
||||||
|
{
|
||||||
|
return fKey.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PaperCap::PaperCap(const string &label, bool isDefault, JobData::Paper paper,
|
PaperCap::PaperCap(const string &label, bool isDefault, JobData::Paper paper,
|
||||||
const BRect &paperRect, const BRect &physicalRect)
|
const BRect &paperRect, const BRect &physicalRect)
|
||||||
:
|
:
|
||||||
@ -151,6 +158,23 @@ ProtocolClassCap::ID() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DriverSpecificCap::DriverSpecificCap(const string& label, bool isDefault,
|
||||||
|
int category, Type type)
|
||||||
|
:
|
||||||
|
BaseCap(label, isDefault),
|
||||||
|
fCategory(category),
|
||||||
|
fType(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
DriverSpecificCap::ID() const
|
||||||
|
{
|
||||||
|
return fCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PrinterCap::PrinterCap(const PrinterData *printer_data)
|
PrinterCap::PrinterCap(const PrinterData *printer_data)
|
||||||
: fPrinterData(printer_data),
|
: fPrinterData(printer_data),
|
||||||
fPrinterID(kUnknownPrinter)
|
fPrinterID(kUnknownPrinter)
|
||||||
@ -163,7 +187,7 @@ PrinterCap::~PrinterCap()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const BaseCap *
|
const BaseCap*
|
||||||
PrinterCap::getDefaultCap(CapID category) const
|
PrinterCap::getDefaultCap(CapID category) const
|
||||||
{
|
{
|
||||||
int count = countCap(category);
|
int count = countCap(category);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user