[haiku-commits] r39153 - in haiku/trunk: headers/libs/print/libprint src/add-ons/print/drivers/canon_lips/lips3 src/add-ons/print/drivers/canon_lips/lips4 src/add-ons/print/drivers/pcl5 src/add-ons/print/drivers/pcl6 ...

  • From: michael.w.pfeiffer@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 26 Oct 2010 11:48:37 +0200 (CEST)

Author: laplace
Date: 2010-10-26 11:48:36 +0200 (Tue, 26 Oct 2010)
New Revision: 39153
Changeset: http://dev.haiku-os.org/changeset/39153

Modified:
   haiku/trunk/headers/libs/print/libprint/JobSetupDlg.h
   haiku/trunk/headers/libs/print/libprint/PrinterCap.h
   haiku/trunk/src/add-ons/print/drivers/canon_lips/lips3/Lips3Cap.cpp
   haiku/trunk/src/add-ons/print/drivers/canon_lips/lips4/Lips4Cap.cpp
   haiku/trunk/src/add-ons/print/drivers/pcl5/PCL5Cap.cpp
   haiku/trunk/src/add-ons/print/drivers/pcl6/PCL6Cap.cpp
   haiku/trunk/src/add-ons/print/drivers/postscript/PSCap.cpp
   haiku/trunk/src/libs/print/libprint/JobSetupDlg.cpp
   haiku/trunk/src/libs/print/libprint/PrinterCap.cpp
Log:
* Enable halftone configuration options if requested by printer driver
  only.
* WIP: Driver specific generic capabilities.


Modified: haiku/trunk/headers/libs/print/libprint/JobSetupDlg.h
===================================================================
--- haiku/trunk/headers/libs/print/libprint/JobSetupDlg.h       2010-10-26 
09:26:41 UTC (rev 39152)
+++ haiku/trunk/headers/libs/print/libprint/JobSetupDlg.h       2010-10-26 
09:48:36 UTC (rev 39153)
@@ -35,6 +35,8 @@
 
 private:
        void UpdateButtonEnabledState();
+       bool IsHalftoneConfigurationNeeded();
+       void CreateHalftoneConfigurationUI();
        void FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
                PrinterCap::CapID category, int id);
        void FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
@@ -44,6 +46,7 @@
        BRadioButton* CreatePageSelectionItem(const char* name, const char* 
label,
                JobData::PageSelection pageSelection);
        void AllowOnlyDigits(BTextView* textView, int maxDigits);
+       void UpdateHalftonePreview();
        JobData::Color Color();
        Halftone::DitherType DitherType();
        float Gamma();
@@ -58,9 +61,11 @@
        const PrinterCap *fPrinterCap;
        BPopUpMenu       *fColorType;
        BPopUpMenu       *fDitherType;
+       BMenuField       *fDitherMenuField;
        JSDSlider        *fGamma;
        JSDSlider        *fInkDensity;
        HalftoneView     *fHalftone;
+       BBox             *fHalftoneBox;
        BRadioButton     *fAll;
        BCheckBox        *fCollate;
        BCheckBox        *fReverse;

Modified: haiku/trunk/headers/libs/print/libprint/PrinterCap.h
===================================================================
--- haiku/trunk/headers/libs/print/libprint/PrinterCap.h        2010-10-26 
09:26:41 UTC (rev 39152)
+++ haiku/trunk/headers/libs/print/libprint/PrinterCap.h        2010-10-26 
09:48:36 UTC (rev 39153)
@@ -21,6 +21,7 @@
        virtual                                 ~BaseCap();
 
        virtual int                             ID() const = 0;
+                       const char*             Key() const;
 
                        string                  fLabel;
                        bool                    fIsDefault;
@@ -108,6 +109,23 @@
 };
 
 
+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 PrinterCap {
@@ -124,9 +142,16 @@
                kBindingLocation,
                kColor,
                kProtocolClass,
+               kDriverSpecifcCapababilities,
+
                // Static boolean settings follow.
                // 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;

Modified: haiku/trunk/src/add-ons/print/drivers/canon_lips/lips3/Lips3Cap.cpp
===================================================================
--- haiku/trunk/src/add-ons/print/drivers/canon_lips/lips3/Lips3Cap.cpp 
2010-10-26 09:26:41 UTC (rev 39152)
+++ haiku/trunk/src/add-ons/print/drivers/canon_lips/lips3/Lips3Cap.cpp 
2010-10-26 09:48:36 UTC (rev 39153)
@@ -155,6 +155,7 @@
                case kResolution:
                case kColor:
                case kCopyCommand:
+               case kHalftone:
                        return true;
                default:
                        return false;

Modified: haiku/trunk/src/add-ons/print/drivers/canon_lips/lips4/Lips4Cap.cpp
===================================================================
--- haiku/trunk/src/add-ons/print/drivers/canon_lips/lips4/Lips4Cap.cpp 
2010-10-26 09:26:41 UTC (rev 39152)
+++ haiku/trunk/src/add-ons/print/drivers/canon_lips/lips4/Lips4Cap.cpp 
2010-10-26 09:48:36 UTC (rev 39153)
@@ -220,6 +220,7 @@
                case kBindingLocation:
                case kColor:
                case kCopyCommand:
+               case kHalftone:
                        return true;
                default:
                        return false;

Modified: haiku/trunk/src/add-ons/print/drivers/pcl5/PCL5Cap.cpp
===================================================================
--- haiku/trunk/src/add-ons/print/drivers/pcl5/PCL5Cap.cpp      2010-10-26 
09:26:41 UTC (rev 39152)
+++ haiku/trunk/src/add-ons/print/drivers/pcl5/PCL5Cap.cpp      2010-10-26 
09:48:36 UTC (rev 39153)
@@ -152,6 +152,7 @@
                case kPaperSource:
                case kResolution:
                case kColor:
+               case kHalftone:
                        return true;
                default:
                        return false;

Modified: haiku/trunk/src/add-ons/print/drivers/pcl6/PCL6Cap.cpp
===================================================================
--- haiku/trunk/src/add-ons/print/drivers/pcl6/PCL6Cap.cpp      2010-10-26 
09:26:41 UTC (rev 39152)
+++ haiku/trunk/src/add-ons/print/drivers/pcl6/PCL6Cap.cpp      2010-10-26 
09:48:36 UTC (rev 39153)
@@ -335,6 +335,7 @@
                case kCopyCommand:
                case kPrintStyle:
                case kProtocolClass:
+               case kHalftone:
                        return true;
                default:
                        return false;

Modified: haiku/trunk/src/add-ons/print/drivers/postscript/PSCap.cpp
===================================================================
--- haiku/trunk/src/add-ons/print/drivers/postscript/PSCap.cpp  2010-10-26 
09:26:41 UTC (rev 39152)
+++ haiku/trunk/src/add-ons/print/drivers/postscript/PSCap.cpp  2010-10-26 
09:48:36 UTC (rev 39153)
@@ -151,6 +151,7 @@
                case kPaperSource:
                case kResolution:
                case kColor:
+               case kHalftone:
                        return true;
                default:
                        return false;

Modified: haiku/trunk/src/libs/print/libprint/JobSetupDlg.cpp
===================================================================
--- haiku/trunk/src/libs/print/libprint/JobSetupDlg.cpp 2010-10-26 09:26:41 UTC 
(rev 39152)
+++ haiku/trunk/src/libs/print/libprint/JobSetupDlg.cpp 2010-10-26 09:48:36 UTC 
(rev 39153)
@@ -133,9 +133,27 @@
        const PrinterCap *printer_cap)
        :
        BView("jobSetup", B_WILL_DRAW),
+       fCopies(NULL),
+       fFromPage(NULL),
+       fToPage(NULL),
        fJobData(job_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));
 }
@@ -182,49 +200,9 @@
        BMenuField* colorMenuField = new BMenuField("color", "Color:", 
fColorType);
        fColorType->SetTargetForItems(this);
        
-       // dither type
-       fDitherType = new BPopUpMenu("");
-       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);
+       if (IsHalftoneConfigurationNeeded())
+               CreateHalftoneConfigurationUI();
 
-       // 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
 
        BBox* pageRangeBox = new BBox("pageRange");
@@ -351,21 +329,26 @@
        BButton* ok = new BButton("ok", "OK", new BMessage(kMsgOK));
        ok->MakeDefault(true);
        
-       BGroupView* halftoneGroup = new BGroupView(B_VERTICAL, 0);
-       BGroupLayout* halftoneLayout = halftoneGroup->GroupLayout();
-       halftoneLayout->AddView(fHalftone);
-       halftoneBox->AddChild(halftoneGroup);
+       if (IsHalftoneConfigurationNeeded()) {
+               BGroupView* halftoneGroup = new BGroupView(B_VERTICAL, 0);
+               BGroupLayout* halftoneLayout = halftoneGroup->GroupLayout();
+               halftoneLayout->AddView(fHalftone);
+               fHalftoneBox->AddChild(halftoneGroup);
+       }
 
        BGridView* qualityGrid = new BGridView();
        BGridLayout* qualityGridLayout = qualityGrid->GridLayout();
        qualityGridLayout->AddItem(colorMenuField->CreateLabelLayoutItem(), 0, 
0);
        qualityGridLayout->AddItem(colorMenuField->CreateMenuBarLayoutItem(), 
1, 0);
-       qualityGridLayout->AddItem(ditherMenuField->CreateLabelLayoutItem(), 0, 
1);
-       qualityGridLayout->AddItem(ditherMenuField->CreateMenuBarLayoutItem(), 
1,
-               1);
-       qualityGridLayout->AddView(fGamma, 0, 2, 2);
-       qualityGridLayout->AddView(fInkDensity, 0, 3, 2);
-       qualityGridLayout->AddView(halftoneBox, 0, 4, 2);
+       if (IsHalftoneConfigurationNeeded()) {
+               
qualityGridLayout->AddItem(fDitherMenuField->CreateLabelLayoutItem(),
+                       0, 1);
+               
qualityGridLayout->AddItem(fDitherMenuField->CreateMenuBarLayoutItem(),
+                       1, 1);
+               qualityGridLayout->AddView(fGamma, 0, 2, 2);
+               qualityGridLayout->AddView(fInkDensity, 0, 3, 2);
+               qualityGridLayout->AddView(fHalftoneBox, 0, 4, 2);
+       }
        qualityGridLayout->SetSpacing(0, 0);
        qualityGridLayout->SetInsets(5, 5, 5, 5);
        qualityBox->AddChild(qualityGrid);
@@ -443,14 +426,76 @@
                .SetInsets(0, 0, 0, 0)
        );
 
-       fHalftone->preview(fJobData->getGamma(), fJobData->getInkDensity(),
-               fJobData->getDitherType(), fJobData->getColor() != 
JobData::kMonochrome);
+       /* TODO remove
+       if (IsHalftoneConfigurationNeeded())
 
+               fHalftone->preview(fJobData->getGamma(), 
fJobData->getInkDensity(),
+                       fJobData->getDitherType(),
+                       fJobData->getColor() != JobData::kMonochrome);
+       */
+       UpdateHalftonePreview();
+
        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
 JobSetupView::FillCapabilityMenu(BPopUpMenu* menu, uint32 message,
        PrinterCap::CapID category, int id)
 {
@@ -472,7 +517,7 @@
                const BaseCap* capability = *capabilities;
                if (message != kMsgNone)
                        item = new BMenuItem(capability->fLabel.c_str(),
-                               new BMessage(kMsgQuality));
+                               new BMessage(message));
                else
                        item = new BMenuItem(capability->fLabel.c_str(), NULL);
 
@@ -542,8 +587,7 @@
                break;
 
        case kMsgQuality:
-               fHalftone->preview(Gamma(), InkDensity(), DitherType(),
-                       Color() != JobData::kMonochrome);
+               UpdateHalftonePreview();
                break;
 
        case kMsgCollateChanged:
@@ -557,6 +601,17 @@
 }
 
 
+void
+JobSetupView::UpdateHalftonePreview()
+{
+       if (!IsHalftoneConfigurationNeeded())
+               return;
+
+       fHalftone->preview(Gamma(), InkDensity(), DitherType(),
+               Color() != JobData::kMonochrome);
+}
+
+
 JobData::Color 
 JobSetupView::Color()
 {
@@ -613,9 +668,11 @@
 {
        fJobData->setShowPreview(showPreview);
        fJobData->setColor(Color());
-       fJobData->setGamma(Gamma());
-       fJobData->setInkDensity(InkDensity());
-       fJobData->setDitherType(DitherType());
+       if (IsHalftoneConfigurationNeeded()) {
+               fJobData->setGamma(Gamma());
+               fJobData->setInkDensity(InkDensity());
+               fJobData->setDitherType(DitherType());
+       }
 
        int first_page;
        int last_page;

Modified: haiku/trunk/src/libs/print/libprint/PrinterCap.cpp
===================================================================
--- haiku/trunk/src/libs/print/libprint/PrinterCap.cpp  2010-10-26 09:26:41 UTC 
(rev 39152)
+++ haiku/trunk/src/libs/print/libprint/PrinterCap.cpp  2010-10-26 09:48:36 UTC 
(rev 39153)
@@ -19,6 +19,13 @@
 }
 
 
+const char*
+BaseCap::Key() const
+{
+       return fKey.c_str();
+}
+
+
 PaperCap::PaperCap(const string &label, bool isDefault, JobData::Paper paper,
        const BRect &paperRect, const BRect &physicalRect)
        :
@@ -151,6 +158,23 @@
 }
 
 
+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)
        : fPrinterData(printer_data), 
        fPrinterID(kUnknownPrinter)
@@ -163,7 +187,7 @@
 }
 
 
-const BaseCap *
+const BaseCap*
 PrinterCap::getDefaultCap(CapID category) const
 {
        int count = countCap(category);


Other related posts:

  • » [haiku-commits] r39153 - in haiku/trunk: headers/libs/print/libprint src/add-ons/print/drivers/canon_lips/lips3 src/add-ons/print/drivers/canon_lips/lips4 src/add-ons/print/drivers/pcl5 src/add-ons/print/drivers/pcl6 ... - michael . w . pfeiffer