[haiku-commits] r39142 - in haiku/trunk: headers/libs/print/libprint src/libs/print/libprint

  • From: michael.w.pfeiffer@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 25 Oct 2010 16:46:26 +0200 (CEST)

Author: laplace
Date: 2010-10-25 16:46:26 +0200 (Mon, 25 Oct 2010)
New Revision: 39142
Changeset: http://dev.haiku-os.org/changeset/39142

Modified:
   haiku/trunk/headers/libs/print/libprint/JobData.h
   haiku/trunk/src/libs/print/libprint/JobData.cpp
   haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp
Log:
* Store resolution ID in libprint specific field in JobData;
  as the pair of x/y resolutions might not be unique in all
  supported Gutenprint printer models 


Modified: haiku/trunk/headers/libs/print/libprint/JobData.h
===================================================================
--- haiku/trunk/headers/libs/print/libprint/JobData.h   2010-10-25 14:21:09 UTC 
(rev 39141)
+++ haiku/trunk/headers/libs/print/libprint/JobData.h   2010-10-25 14:46:26 UTC 
(rev 39142)
@@ -226,6 +226,7 @@
 private:
        bool        fShowPreview;
        Paper       fPaper;
+       int32       fResolutionID;
        int32       fXRes;
        int32       fYRes;
        Orientation fOrientation;
@@ -271,6 +272,9 @@
        Paper getPaper() const { return fPaper; }
        void  setPaper(Paper paper) { fPaper = paper; }
 
+       int32 getResolutionID() const { return fResolutionID; }
+       void setResolutionID(int32 resolution) { fResolutionID = resolution; }
+
        int32 getXres() const { return fXRes; } 
        void  setXres(int32 xres) { fXRes = xres; }
 

Modified: haiku/trunk/src/libs/print/libprint/JobData.cpp
===================================================================
--- haiku/trunk/src/libs/print/libprint/JobData.cpp     2010-10-25 14:21:09 UTC 
(rev 39141)
+++ haiku/trunk/src/libs/print/libprint/JobData.cpp     2010-10-25 14:46:26 UTC 
(rev 39142)
@@ -38,6 +38,7 @@
 static const char* kJDMarginUnit            = "JJJJ_margin_unit";
 static const char* kJDPhysicalRect          = "JJJJ_physical_rect";
 static const char* kJDScaledPhysicalRect    = "JJJJ_scaled_physical_rect";
+static const char* kJDResolution            = "JJJJ_resolution";
 
 JobData::JobData(BMessage *msg, const PrinterCap *cap, Settings settings)
 {
@@ -52,6 +53,7 @@
 {
        fShowPreview           = job_data.fShowPreview;
        fPaper                 = job_data.fPaper;
+       fResolutionID          = job_data.fResolutionID;
        fXRes                  = job_data.fXRes;
        fYRes                  = job_data.fYRes;
        fOrientation           = job_data.fOrientation;
@@ -86,6 +88,7 @@
 {
        fShowPreview           = job_data.fShowPreview;
        fPaper                 = job_data.fPaper;
+       fResolutionID          = job_data.fResolutionID;
        fXRes                  = job_data.fXRes;
        fYRes                  = job_data.fYRes;
        fOrientation           = job_data.fOrientation;
@@ -137,6 +140,17 @@
        } else
                fPaper = kA4;
 
+       if (msg->HasInt32(kJDResolution)) {
+               int32 resolution;
+               msg->FindInt32(kJDResolution, &resolution);
+               fResolutionID = resolution;
+       } else if (cap->isSupport(PrinterCap::kResolution)) {
+               fResolutionID = 
cap->getDefaultCap(PrinterCap::kResolution)->ID();
+       } else {
+               // should not reach here!
+               fResolutionID = 0;
+       }
+
        if (msg->HasInt64(kJDXRes)) {
                int64 xres64; 
                msg->FindInt64(kJDXRes, &xres64);
@@ -311,6 +325,9 @@
        msg->RemoveName(kJDPaper);
        msg->AddInt32(kJDPaper, fPaper);
 
+       msg->RemoveName(kJDResolution);
+       msg->AddInt32(kJDResolution, fResolutionID);
+
        msg->RemoveName(kJDXRes);
        msg->AddInt64(kJDXRes, fXRes);
        

Modified: haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp
===================================================================
--- haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp        2010-10-25 
14:21:09 UTC (rev 39141)
+++ haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp        2010-10-25 
14:46:26 UTC (rev 39142)
@@ -14,6 +14,7 @@
 #include <Bitmap.h>
 #include <Box.h>
 #include <Button.h>
+#include <Debug.h>
 #include <Font.h>
 #include <GridView.h>
 #include <GroupLayout.h>
@@ -266,18 +267,14 @@
        BRect physical_rect = paperCap->fPhysicalRect;
        fJobData->setPaper(paperCap->fPaper);
 
-       int count;
-
-       count = fPrinterCap->countCap(PrinterCap::kResolution);
-       ResolutionCap **resolution_cap = (ResolutionCap 
**)fPrinterCap->enumCap(PrinterCap::kResolution);
-       const char *resolution_label = fResolution->FindMarked()->Label();
-       while (count--) {
-               if (!strcmp((*resolution_cap)->fLabel.c_str(), 
resolution_label)) {
-                       fJobData->setXres((*resolution_cap)->fXResolution);
-                       fJobData->setYres((*resolution_cap)->fYResolution);
-                       break;
-               }
-               resolution_cap++;
+       const char *resolutionLabel = fResolution->FindMarked()->Label();
+       const ResolutionCap* resolution = static_cast<const ResolutionCap*>(
+               fPrinterCap->findCap(PrinterCap::kResolution, resolutionLabel));
+       ASSERT(resolution != NULL);
+       if (resolution != NULL) {
+               fJobData->setXres(resolution->fXResolution);
+               fJobData->setYres(resolution->fYResolution);
+               fJobData->setResolutionID(resolution->ID());
        }
 
        // rotate paper and physical rectangle if landscape orientation


Other related posts: