2004-01-27 21:44:26 +00:00
|
|
|
/*
|
|
|
|
|
* JobData.cpp
|
|
|
|
|
* Copyright 1999-2000 Y.Takagi. All Rights Reserved.
|
|
|
|
|
*/
|
|
|
|
|
|
2010-10-30 06:54:16 +00:00
|
|
|
#include "JobData.h"
|
|
|
|
|
|
2010-11-14 10:58:10 +00:00
|
|
|
#include <Debug.h>
|
2004-01-27 21:44:26 +00:00
|
|
|
#include <InterfaceDefs.h>
|
|
|
|
|
#include <Message.h>
|
2010-10-30 06:54:16 +00:00
|
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
|
|
2004-01-27 21:44:26 +00:00
|
|
|
#include "PrinterCap.h"
|
|
|
|
|
#include "DbgMsg.h"
|
|
|
|
|
|
2005-01-09 17:42:53 +00:00
|
|
|
static const char *kJDXRes = "xres";
|
|
|
|
|
static const char *kJDYRes = "yres";
|
|
|
|
|
static const char *kJDCopies = "copies";
|
|
|
|
|
static const char *kJDOrientation = "orientation";
|
|
|
|
|
static const char *kJDScaling = "scale";
|
|
|
|
|
static const char *kJDScaledPaperRect = "paper_rect";
|
|
|
|
|
static const char *kJDScaledPrintableRect = "printable_rect";
|
|
|
|
|
static const char *kJDFirstPage = "first_page";
|
|
|
|
|
static const char *kJDLastPage = "last_page";
|
|
|
|
|
|
2007-01-20 15:52:37 +00:00
|
|
|
static const char *kJDShowPreview = "JJJJ_showPreview";
|
2005-01-09 17:42:53 +00:00
|
|
|
static const char *kJDPaper = "JJJJ_paper";
|
|
|
|
|
static const char *kJDNup = "JJJJ_nup";
|
|
|
|
|
static const char *kJDGamma = "JJJJ_gamma";
|
|
|
|
|
static const char *kJDInkDensity = "JJJJ_ink_density";
|
|
|
|
|
static const char *kJDPaperSource = "JJJJ_paper_source";
|
|
|
|
|
static const char *kJDCollate = "JJJJ_collate";
|
|
|
|
|
static const char *kJDReverse = "JJJJ_reverse";
|
|
|
|
|
static const char *kJDPrintStyle = "JJJJ_print_style";
|
|
|
|
|
static const char *kJDBindingLocation = "JJJJ_binding_location";
|
|
|
|
|
static const char *kJDPageOrder = "JJJJ_page_order";
|
|
|
|
|
static const char *kJDColor = "JJJJ_color";
|
|
|
|
|
static const char *kJDDitherType = "JJJJ_dither_type";
|
|
|
|
|
static const char *kJDPaperRect = "JJJJ_paper_rect";
|
|
|
|
|
static const char* kJDPrintableRect = "JJJJ_printable_rect";
|
2005-01-16 16:22:06 +00:00
|
|
|
static const char* kJDPageSelection = "JJJJ_page_selection";
|
2005-01-22 14:26:52 +00:00
|
|
|
static const char* kJDMarginUnit = "JJJJ_margin_unit";
|
|
|
|
|
static const char* kJDPhysicalRect = "JJJJ_physical_rect";
|
|
|
|
|
static const char* kJDScaledPhysicalRect = "JJJJ_scaled_physical_rect";
|
2010-10-25 14:46:26 +00:00
|
|
|
static const char* kJDResolution = "JJJJ_resolution";
|
2010-10-30 06:54:16 +00:00
|
|
|
static const char* kJDDriverSpecificSettings = "JJJJ_driverSpecificSettings";
|
|
|
|
|
|
2010-11-14 10:58:10 +00:00
|
|
|
|
|
|
|
|
DriverSpecificSettings::DriverSpecificSettings()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DriverSpecificSettings::DriverSpecificSettings(
|
|
|
|
|
const DriverSpecificSettings& settings)
|
|
|
|
|
:
|
|
|
|
|
fSettings(settings.fSettings)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DriverSpecificSettings &
|
|
|
|
|
DriverSpecificSettings::operator=(const DriverSpecificSettings &settings)
|
|
|
|
|
{
|
|
|
|
|
fSettings = settings.fSettings;
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
DriverSpecificSettings::MakeEmpty()
|
|
|
|
|
{
|
|
|
|
|
fSettings.MakeEmpty();
|
|
|
|
|
}
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-10-26 09:03:26 +00:00
|
|
|
|
2010-11-14 10:58:10 +00:00
|
|
|
bool
|
|
|
|
|
DriverSpecificSettings::HasString(const char* key) const
|
2004-01-27 21:44:26 +00:00
|
|
|
{
|
2010-11-14 10:58:10 +00:00
|
|
|
const char* value;
|
|
|
|
|
return fSettings.FindString(key, &value) == B_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char*
|
|
|
|
|
DriverSpecificSettings::GetString(const char* key) const
|
|
|
|
|
{
|
|
|
|
|
ASSERT(HasString(key));
|
|
|
|
|
const char* value = NULL;
|
|
|
|
|
fSettings.FindString(key, &value);
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
DriverSpecificSettings::SetString(const char* key, const char* value)
|
|
|
|
|
{
|
|
|
|
|
if (HasString(key))
|
|
|
|
|
fSettings.ReplaceString(key, value);
|
|
|
|
|
else
|
|
|
|
|
fSettings.AddString(key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
DriverSpecificSettings::HasBoolean(const char* key) const
|
|
|
|
|
{
|
|
|
|
|
bool value;
|
|
|
|
|
return fSettings.FindBool(key, &value) == B_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
DriverSpecificSettings::GetBoolean(const char* key) const
|
|
|
|
|
{
|
|
|
|
|
ASSERT(HasBoolean(key));
|
|
|
|
|
bool value;
|
|
|
|
|
fSettings.FindBool(key, &value);
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
DriverSpecificSettings::SetBoolean(const char* key, bool value)
|
|
|
|
|
{
|
|
|
|
|
if (HasBoolean(key))
|
|
|
|
|
fSettings.ReplaceBool(key, value);
|
|
|
|
|
else
|
|
|
|
|
fSettings.AddBool(key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
DriverSpecificSettings::HasInt(const char* key) const
|
|
|
|
|
{
|
|
|
|
|
int32 value;
|
|
|
|
|
return fSettings.FindInt32(key, &value) == B_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int32
|
|
|
|
|
DriverSpecificSettings::GetInt(const char* key) const
|
|
|
|
|
{
|
|
|
|
|
ASSERT(HasInt(key));
|
|
|
|
|
int32 value;
|
|
|
|
|
fSettings.FindInt32(key, &value);
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
DriverSpecificSettings::SetInt(const char* key, int32 value)
|
|
|
|
|
{
|
|
|
|
|
if (HasInt(key))
|
|
|
|
|
fSettings.ReplaceInt32(key, value);
|
|
|
|
|
else
|
|
|
|
|
fSettings.AddInt32(key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
DriverSpecificSettings::HasDouble(const char* key) const
|
|
|
|
|
{
|
|
|
|
|
double value;
|
|
|
|
|
return fSettings.FindDouble(key, &value) == B_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double
|
|
|
|
|
DriverSpecificSettings::GetDouble(const char* key) const
|
|
|
|
|
{
|
|
|
|
|
ASSERT(HasDouble(key));
|
|
|
|
|
double value;
|
|
|
|
|
fSettings.FindDouble(key, &value);
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
DriverSpecificSettings::SetDouble(const char* key, double value)
|
|
|
|
|
{
|
|
|
|
|
if (HasDouble(key))
|
|
|
|
|
fSettings.ReplaceDouble(key, value);
|
|
|
|
|
else
|
|
|
|
|
fSettings.AddDouble(key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BMessage&
|
|
|
|
|
DriverSpecificSettings::Message()
|
|
|
|
|
{
|
|
|
|
|
return fSettings;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
JobData::JobData(BMessage *message, const PrinterCap *printerCap, SettingType settingType)
|
2010-11-14 10:58:10 +00:00
|
|
|
{
|
2010-12-08 19:09:44 +00:00
|
|
|
Load(message, printerCap, settingType);
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-26 09:03:26 +00:00
|
|
|
|
2004-01-27 21:44:26 +00:00
|
|
|
JobData::~JobData()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2010-10-26 09:03:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
JobData::JobData(const JobData &jobData)
|
2004-01-27 21:44:26 +00:00
|
|
|
{
|
2010-12-08 19:09:44 +00:00
|
|
|
*this = jobData;
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-26 09:03:26 +00:00
|
|
|
|
|
|
|
|
JobData&
|
2010-12-08 19:09:44 +00:00
|
|
|
JobData::operator=(const JobData &jobData)
|
2004-01-27 21:44:26 +00:00
|
|
|
{
|
2010-12-08 19:09:44 +00:00
|
|
|
fShowPreview = jobData.fShowPreview;
|
|
|
|
|
fPaper = jobData.fPaper;
|
|
|
|
|
fResolutionID = jobData.fResolutionID;
|
|
|
|
|
fXRes = jobData.fXRes;
|
|
|
|
|
fYRes = jobData.fYRes;
|
|
|
|
|
fOrientation = jobData.fOrientation;
|
|
|
|
|
fScaling = jobData.fScaling;
|
|
|
|
|
fPaperRect = jobData.fPaperRect;
|
|
|
|
|
fScaledPaperRect = jobData.fScaledPaperRect;
|
|
|
|
|
fPrintableRect = jobData.fPrintableRect;
|
|
|
|
|
fScaledPrintableRect = jobData.fScaledPrintableRect;
|
|
|
|
|
fNup = jobData.fNup;
|
|
|
|
|
fFirstPage = jobData.fFirstPage;
|
|
|
|
|
fLastPage = jobData.fLastPage;
|
|
|
|
|
fGamma = jobData.fGamma;
|
|
|
|
|
fInkDensity = jobData.fInkDensity;
|
|
|
|
|
fPaperSource = jobData.fPaperSource;
|
|
|
|
|
fCopies = jobData.fCopies;
|
|
|
|
|
fCollate = jobData.fCollate;
|
|
|
|
|
fReverse = jobData.fReverse;
|
|
|
|
|
fPrintStyle = jobData.fPrintStyle;
|
|
|
|
|
fBindingLocation = jobData.fBindingLocation;
|
|
|
|
|
fPageOrder = jobData.fPageOrder;
|
|
|
|
|
fSettingType = jobData.fSettingType;
|
|
|
|
|
fMsg = jobData.fMsg;
|
|
|
|
|
fColor = jobData.fColor;
|
|
|
|
|
fDitherType = jobData.fDitherType;
|
|
|
|
|
fPageSelection = jobData.fPageSelection;
|
|
|
|
|
fMarginUnit = jobData.fMarginUnit;
|
|
|
|
|
fPhysicalRect = jobData.fPhysicalRect;
|
|
|
|
|
fScaledPhysicalRect = jobData.fScaledPhysicalRect;
|
|
|
|
|
fDriverSpecificSettings = jobData.fDriverSpecificSettings;
|
2004-01-27 21:44:26 +00:00
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
|
2010-10-26 09:03:26 +00:00
|
|
|
|
|
|
|
|
void
|
2010-12-08 19:09:44 +00:00
|
|
|
JobData::Load(BMessage* message, const PrinterCap* printerCap,
|
|
|
|
|
SettingType settingType)
|
2004-01-27 21:44:26 +00:00
|
|
|
{
|
2010-12-08 19:09:44 +00:00
|
|
|
fMsg = message;
|
|
|
|
|
fSettingType = settingType;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2005-01-23 12:28:25 +00:00
|
|
|
const PaperCap *paperCap = NULL;
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasBool(kJDShowPreview))
|
|
|
|
|
fShowPreview = message->FindBool(kJDShowPreview);
|
2007-01-20 15:52:37 +00:00
|
|
|
else
|
|
|
|
|
fShowPreview = false;
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDPaper))
|
|
|
|
|
fPaper = (Paper)message->FindInt32(kJDPaper);
|
2010-12-10 07:26:14 +00:00
|
|
|
else if (printerCap->Supports(PrinterCap::kPaper)) {
|
2010-12-08 19:09:44 +00:00
|
|
|
paperCap = (const PaperCap *)printerCap->GetDefaultCap(
|
|
|
|
|
PrinterCap::kPaper);
|
2010-10-25 11:34:31 +00:00
|
|
|
fPaper = paperCap->fPaper;
|
2005-01-23 12:28:25 +00:00
|
|
|
} else
|
2004-01-30 17:10:36 +00:00
|
|
|
fPaper = kA4;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDResolution)) {
|
|
|
|
|
message->FindInt32(kJDResolution, &fResolutionID);
|
2010-12-10 07:26:14 +00:00
|
|
|
} else if (printerCap->Supports(PrinterCap::kResolution)) {
|
2010-12-08 19:09:44 +00:00
|
|
|
fResolutionID = printerCap->GetDefaultCap(PrinterCap::kResolution)
|
|
|
|
|
->ID();
|
2010-10-25 14:46:26 +00:00
|
|
|
} else {
|
|
|
|
|
// should not reach here!
|
|
|
|
|
fResolutionID = 0;
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt64(kJDXRes)) {
|
2004-01-27 21:44:26 +00:00
|
|
|
int64 xres64;
|
2010-12-08 19:09:44 +00:00
|
|
|
message->FindInt64(kJDXRes, &xres64);
|
2004-01-30 17:10:36 +00:00
|
|
|
fXRes = xres64;
|
2010-12-10 07:26:14 +00:00
|
|
|
} else if (printerCap->Supports(PrinterCap::kResolution)) {
|
2010-12-08 19:09:44 +00:00
|
|
|
fXRes = ((const ResolutionCap *)printerCap->GetDefaultCap(
|
2010-10-25 11:34:31 +00:00
|
|
|
PrinterCap::kResolution))->fXResolution;
|
2004-01-27 21:44:26 +00:00
|
|
|
} else {
|
2004-01-30 17:10:36 +00:00
|
|
|
fXRes = 300;
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt64(kJDYRes)) {
|
2004-01-27 21:44:26 +00:00
|
|
|
int64 yres64;
|
2010-12-08 19:09:44 +00:00
|
|
|
message->FindInt64(kJDYRes, &yres64);
|
2004-01-30 17:10:36 +00:00
|
|
|
fYRes = yres64;
|
2010-12-10 07:26:14 +00:00
|
|
|
} else if (printerCap->Supports(PrinterCap::kResolution)) {
|
2010-12-08 19:09:44 +00:00
|
|
|
fYRes = ((const ResolutionCap *)printerCap->GetDefaultCap(
|
2010-10-25 11:34:31 +00:00
|
|
|
PrinterCap::kResolution))->fYResolution;
|
2004-01-27 21:44:26 +00:00
|
|
|
} else {
|
2004-01-30 17:10:36 +00:00
|
|
|
fYRes = 300;
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDOrientation))
|
|
|
|
|
fOrientation = (Orientation)message->FindInt32(kJDOrientation);
|
2010-12-10 07:26:14 +00:00
|
|
|
else if (printerCap->Supports(PrinterCap::kOrientation))
|
2010-12-08 19:09:44 +00:00
|
|
|
fOrientation = ((const OrientationCap *)printerCap->GetDefaultCap(
|
2010-10-25 11:34:31 +00:00
|
|
|
PrinterCap::kOrientation))->fOrientation;
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fOrientation = kPortrait;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasFloat(kJDScaling))
|
|
|
|
|
fScaling = message->FindFloat(kJDScaling);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fScaling = 100.0f;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasRect(kJDPaperRect)) {
|
|
|
|
|
fPaperRect = message->FindRect(kJDPaperRect);
|
2005-01-23 12:28:25 +00:00
|
|
|
} else if (paperCap != NULL) {
|
2010-10-25 11:34:31 +00:00
|
|
|
fPaperRect = paperCap->fPaperRect;
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasRect(kJDScaledPaperRect)) {
|
|
|
|
|
fScaledPaperRect = message->FindRect(kJDScaledPaperRect);
|
2005-01-23 12:28:25 +00:00
|
|
|
} else {
|
|
|
|
|
fScaledPaperRect = fPaperRect;
|
2005-01-09 17:42:53 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasRect(kJDPrintableRect)) {
|
|
|
|
|
fPrintableRect = message->FindRect(kJDPrintableRect);
|
2005-01-23 12:28:25 +00:00
|
|
|
} else if (paperCap != NULL) {
|
2010-10-25 11:34:31 +00:00
|
|
|
fPrintableRect = paperCap->fPhysicalRect;
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasRect(kJDScaledPrintableRect)) {
|
|
|
|
|
fScaledPrintableRect = message->FindRect(kJDScaledPrintableRect);
|
2005-01-23 12:28:25 +00:00
|
|
|
} else {
|
|
|
|
|
fScaledPrintableRect = fPrintableRect;
|
2005-01-09 17:42:53 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasRect(kJDPhysicalRect)) {
|
|
|
|
|
fPhysicalRect = message->FindRect(kJDPhysicalRect);
|
2005-01-23 12:28:25 +00:00
|
|
|
} else if (paperCap != NULL) {
|
2010-10-25 11:34:31 +00:00
|
|
|
fPhysicalRect = paperCap->fPhysicalRect;
|
2005-01-22 14:26:52 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasRect(kJDScaledPhysicalRect)) {
|
|
|
|
|
fScaledPhysicalRect = message->FindRect(kJDScaledPhysicalRect);
|
2005-01-23 12:28:25 +00:00
|
|
|
} else {
|
|
|
|
|
fScaledPhysicalRect = fPhysicalRect;
|
2005-01-22 14:26:52 +00:00
|
|
|
}
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDFirstPage))
|
|
|
|
|
fFirstPage = message->FindInt32(kJDFirstPage);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fFirstPage = 1;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDLastPage))
|
|
|
|
|
fLastPage = message->FindInt32(kJDLastPage);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fLastPage = -1;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDNup))
|
|
|
|
|
fNup = message->FindInt32(kJDNup);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fNup = 1;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasFloat(kJDGamma))
|
2004-01-30 17:10:36 +00:00
|
|
|
fGamma = fMsg->FindFloat(kJDGamma);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-02-13 23:54:17 +00:00
|
|
|
fGamma = 0.25f;
|
|
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasFloat(kJDInkDensity))
|
2004-02-13 23:54:17 +00:00
|
|
|
fInkDensity = fMsg->FindFloat(kJDInkDensity);
|
|
|
|
|
else
|
|
|
|
|
fInkDensity = 0.0f;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDPaperSource))
|
2004-01-30 17:10:36 +00:00
|
|
|
fPaperSource = (PaperSource)fMsg->FindInt32(kJDPaperSource);
|
2010-12-10 07:26:14 +00:00
|
|
|
else if (printerCap->Supports(PrinterCap::kPaperSource))
|
2010-12-08 19:09:44 +00:00
|
|
|
fPaperSource = ((const PaperSourceCap *)printerCap->GetDefaultCap(
|
2010-10-25 11:34:31 +00:00
|
|
|
PrinterCap::kPaperSource))->fPaperSource;
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fPaperSource = kAuto;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDCopies))
|
|
|
|
|
fCopies = message->FindInt32(kJDCopies);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fCopies = 1;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasBool(kJDCollate))
|
|
|
|
|
fCollate = message->FindBool(kJDCollate);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fCollate = false;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasBool(kJDReverse))
|
|
|
|
|
fReverse = message->FindBool(kJDReverse);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fReverse = false;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDPrintStyle))
|
|
|
|
|
fPrintStyle = (PrintStyle)message->FindInt32(kJDPrintStyle);
|
2010-12-10 07:26:14 +00:00
|
|
|
else if (printerCap->Supports(PrinterCap::kPrintStyle))
|
2010-12-08 19:09:44 +00:00
|
|
|
fPrintStyle = ((const PrintStyleCap *)printerCap->GetDefaultCap(
|
2010-10-25 11:34:31 +00:00
|
|
|
PrinterCap::kPrintStyle))->fPrintStyle;
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fPrintStyle = kSimplex;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDBindingLocation))
|
|
|
|
|
fBindingLocation = (BindingLocation)message->FindInt32(
|
|
|
|
|
kJDBindingLocation);
|
2010-12-10 07:26:14 +00:00
|
|
|
else if (printerCap->Supports(PrinterCap::kBindingLocation))
|
2010-12-08 19:09:44 +00:00
|
|
|
fBindingLocation = ((const BindingLocationCap *)printerCap->
|
|
|
|
|
GetDefaultCap(PrinterCap::kBindingLocation))->fBindingLocation;
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fBindingLocation = kLongEdgeLeft;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDPageOrder))
|
|
|
|
|
fPageOrder = (PageOrder)message->FindInt32(kJDPageOrder);
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2004-01-30 17:10:36 +00:00
|
|
|
fPageOrder = kAcrossFromLeft;
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDColor))
|
|
|
|
|
fColor = (Color)message->FindInt32(kJDColor);
|
2010-12-10 07:26:14 +00:00
|
|
|
else if (printerCap->Supports(PrinterCap::kColor))
|
2010-12-08 19:09:44 +00:00
|
|
|
fColor = ((const ColorCap *)printerCap->GetDefaultCap(
|
|
|
|
|
PrinterCap::kColor))->fColor;
|
2004-01-27 21:44:26 +00:00
|
|
|
else
|
2005-01-16 16:22:06 +00:00
|
|
|
fColor = kMonochrome;
|
2004-02-13 23:54:17 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDDitherType))
|
|
|
|
|
fDitherType = (Halftone::DitherType)message->FindInt32(kJDDitherType);
|
2004-02-13 23:54:17 +00:00
|
|
|
else
|
|
|
|
|
fDitherType = Halftone::kTypeFloydSteinberg;
|
2005-01-16 16:22:06 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDPageSelection))
|
|
|
|
|
fPageSelection = (PageSelection)message->FindInt32(kJDPageSelection);
|
2005-01-16 16:22:06 +00:00
|
|
|
else
|
|
|
|
|
fPageSelection = kAllPages;
|
2005-01-22 14:26:52 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasInt32(kJDMarginUnit))
|
|
|
|
|
fMarginUnit = (MarginUnit)message->FindInt32(kJDMarginUnit);
|
2005-01-22 14:26:52 +00:00
|
|
|
else
|
|
|
|
|
fMarginUnit = kUnitInch;
|
2010-10-30 06:54:16 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message->HasMessage(kJDDriverSpecificSettings))
|
|
|
|
|
message->FindMessage(kJDDriverSpecificSettings,
|
2010-11-14 10:58:10 +00:00
|
|
|
&fDriverSpecificSettings.Message());
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-26 09:03:26 +00:00
|
|
|
|
|
|
|
|
void
|
2010-12-08 19:09:44 +00:00
|
|
|
JobData::Save(BMessage* message)
|
2004-01-27 21:44:26 +00:00
|
|
|
{
|
2010-12-08 19:09:44 +00:00
|
|
|
if (message == NULL) {
|
|
|
|
|
message = fMsg;
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
2004-02-13 23:54:17 +00:00
|
|
|
// page settings
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPaper);
|
|
|
|
|
message->AddInt32(kJDPaper, fPaper);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDResolution);
|
|
|
|
|
message->AddInt32(kJDResolution, fResolutionID);
|
2010-10-25 14:46:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDXRes);
|
|
|
|
|
message->AddInt64(kJDXRes, fXRes);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDYRes);
|
|
|
|
|
message->AddInt64(kJDYRes, fYRes);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDOrientation);
|
|
|
|
|
message->AddInt32(kJDOrientation, fOrientation);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDScaling);
|
|
|
|
|
message->AddFloat(kJDScaling, fScaling);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPaperRect);
|
|
|
|
|
message->AddRect(kJDPaperRect, fPaperRect);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDScaledPaperRect);
|
|
|
|
|
message->AddRect(kJDScaledPaperRect, fScaledPaperRect);
|
2005-01-09 17:42:53 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPrintableRect);
|
|
|
|
|
message->AddRect(kJDPrintableRect, fPrintableRect);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDScaledPrintableRect);
|
|
|
|
|
message->AddRect(kJDScaledPrintableRect, fScaledPrintableRect);
|
2005-01-09 17:42:53 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPhysicalRect);
|
|
|
|
|
message->AddRect(kJDPhysicalRect, fPhysicalRect);
|
2005-01-22 14:26:52 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDScaledPhysicalRect);
|
|
|
|
|
message->AddRect(kJDScaledPhysicalRect, fScaledPhysicalRect);
|
2005-01-22 14:26:52 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDMarginUnit);
|
|
|
|
|
message->AddInt32(kJDMarginUnit, fMarginUnit);
|
2005-01-22 14:26:52 +00:00
|
|
|
|
2007-01-20 15:52:37 +00:00
|
|
|
// page settings end here
|
2004-02-13 23:54:17 +00:00
|
|
|
|
|
|
|
|
// job settings
|
2007-01-20 15:52:37 +00:00
|
|
|
|
|
|
|
|
// make sure job settings are not present in page settings
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDShowPreview);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddBool(kJDShowPreview, fShowPreview);
|
2007-01-20 15:52:37 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDNup);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDNup, fNup);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDFirstPage);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDFirstPage, fFirstPage);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDLastPage);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDLastPage, fLastPage);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDGamma);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddFloat(kJDGamma, fGamma);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDInkDensity);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddFloat(kJDInkDensity, fInkDensity);
|
2004-02-13 23:54:17 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPaperSource);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDPaperSource, fPaperSource);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDCopies);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDCopies, fCopies);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDCollate);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddBool(kJDCollate, fCollate);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDReverse);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddBool(kJDReverse, fReverse);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPrintStyle);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDPrintStyle, fPrintStyle);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDBindingLocation);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDBindingLocation, fBindingLocation);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPageOrder);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDPageOrder, fPageOrder);
|
2004-01-27 21:44:26 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDColor);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDColor, fColor);
|
2004-02-13 23:54:17 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDDitherType);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDDitherType, fDitherType);
|
2005-01-16 16:22:06 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDPageSelection);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddInt32(kJDPageSelection, fPageSelection);
|
2010-10-30 06:54:16 +00:00
|
|
|
|
2010-12-08 19:09:44 +00:00
|
|
|
message->RemoveName(kJDDriverSpecificSettings);
|
2010-11-14 10:58:10 +00:00
|
|
|
if (fSettingType == kJobSettings)
|
2010-10-30 06:54:16 +00:00
|
|
|
{
|
2010-12-08 19:09:44 +00:00
|
|
|
message->AddMessage(kJDDriverSpecificSettings,
|
2010-11-14 10:58:10 +00:00
|
|
|
&fDriverSpecificSettings.Message());
|
2010-10-30 06:54:16 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2010-11-14 10:58:10 +00:00
|
|
|
DriverSpecificSettings&
|
|
|
|
|
JobData::Settings()
|
2010-10-30 06:54:16 +00:00
|
|
|
{
|
2010-11-14 10:58:10 +00:00
|
|
|
return fDriverSpecificSettings;
|
2010-10-30 06:54:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2010-11-14 10:58:10 +00:00
|
|
|
const DriverSpecificSettings&
|
|
|
|
|
JobData::Settings() const
|
2010-10-30 06:54:16 +00:00
|
|
|
{
|
2010-11-14 10:58:10 +00:00
|
|
|
return fDriverSpecificSettings;
|
2004-01-27 21:44:26 +00:00
|
|
|
}
|