root/src/add-ons/print/drivers/canon_lips/lips4/Lips4Cap.cpp
/*
 * Lips4Cap.cpp
 * Copyright 1999-2000 Y.Takagi. All Rights Reserved.
 */


#include "Lips4Cap.h"

#define TO72DPI(a)      (a * 72.0f / 600.0f)

const PaperCap a3(
        "A3",
        false,
        JobData::kA3,
        BRect(0.0f,            0.0f,            TO72DPI(7014.0f), TO72DPI(9920.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(6894.0f), TO72DPI(9800.0f)));

const PaperCap a4(
        "A4",
        true,
        JobData::kA4,
        BRect(0.0f,            0.0f,            TO72DPI(4960.0f), TO72DPI(7014.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(4840.0f), TO72DPI(6894.0f)));

const PaperCap a5(
        "A5",
        false,
        JobData::kA5,
        BRect(0.0f,            0.0f,            TO72DPI(3506.0f), TO72DPI(4960.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(3386.0f), TO72DPI(4840.0f)));

const PaperCap japanese_postcard(
        "Japanese Postcard",
        false,
        JobData::kJapanesePostcard,
        BRect(0.0f,           0.0f,             TO72DPI(2362.0f), TO72DPI(3506.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(2242.0f), TO72DPI(3386.0f)));

const PaperCap b4(
        "B4",
        false,
        JobData::kB4,
        BRect(0.0f,            0.0f,            TO72DPI(6070.0f), TO72DPI(8598.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(5950.0f), TO72DPI(8478.0f)));

const PaperCap b5(
        "B5",
        false,
        JobData::kB5,
        BRect(0.0f,            0.0f,            TO72DPI(4298.0f), TO72DPI(6070.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(4178.0f), TO72DPI(5950.0f)));

const PaperCap letter(
        "Letter",
        false,
        JobData::kLetter,
        BRect(0.0f,            0.0f,            TO72DPI(5100.0f), TO72DPI(6600.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(4980.0f), TO72DPI(6480.0f)));

const PaperCap legal(
        "Legal",
        false,
        JobData::kLegal,
        BRect(0.0f,            0.0f,            TO72DPI(5100.0f), TO72DPI(8400.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(4980.0f), TO72DPI(8280.0f)));

const PaperCap tabloid(
        "Tabloid",
        false,
        JobData::kTabloid,
        BRect(0.0f,            0.0f,            TO72DPI(6600.0), TO72DPI(10200.0)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(6480.0), TO72DPI(10080.0)));

const PaperCap executive(
        "Executive",
        false,
        JobData::kExecutive,
        BRect(0.0f,            0.0f,            TO72DPI(4350.0f), TO72DPI(6300.0f)),
        BRect(TO72DPI(120.0f), TO72DPI(120.0f), TO72DPI(4230.0f), TO72DPI(6180.0f)));

const PaperCap japanese_envelope_you4(
        "Japanese Envelope You#4",
        false,
        JobData::kJEnvYou4,
        BRect(0.0f,            0.0f,            TO72DPI(2480.0f), TO72DPI(5550.0f)),
        BRect(TO72DPI(236.0f), TO72DPI(236.0f), TO72DPI(2244.0f), TO72DPI(5314.0f)));
/*
const PaperCap japanese_envelope_kaku2(
        "Japanese Envelope Kaku#2",
        false,
        JobData::kJEnvKaku2,
        BRect(0.0f,            0.0f,            TO72DPI(5568.0f), TO72DPI(7842.0f)),
        BRect(TO72DPI(236.0f), TO72DPI(236.0f), TO72DPI(5432.0f), TO72DPI(7606.0f)));
*/
const PaperSourceCap autobin("Auto",  true,  JobData::kAuto);
const PaperSourceCap manual("Manual", false, JobData::kManual);
const PaperSourceCap upper("Upper",   false, JobData::kUpper);
const PaperSourceCap middle("Middle", false, JobData::kMiddle);
const PaperSourceCap lower("Lower",   false, JobData::kLower);

const ResolutionCap dpi1200("1200dpi", false, 0, 1200, 1200);
const ResolutionCap dpi600("600dpi",   true,  1, 600,  600);
const ResolutionCap dpi300("300dpi",   false, 2, 300,  300);

const PrintStyleCap simplex("Simplex", true,  JobData::kSimplex);
const PrintStyleCap duplex("Duplex",   false, JobData::kDuplex);
const PrintStyleCap booklet("Booklet", false, JobData::kBooklet);

const BindingLocationCap longedge1("Long Edge (left)",     true,
        JobData::kLongEdgeLeft);
const BindingLocationCap longedge2("Long Edge (right)",    false,
        JobData::kLongEdgeRight);
const BindingLocationCap shortedge1("Short Edge (top)",    false,
        JobData::kShortEdgeTop);
const BindingLocationCap shortedge2("Short Edge (bottom)", false,
        JobData::kShortEdgeBottom);

const PaperCap* papers[] = {
        &a4,
        &a3,
        &a5,
        &b4,
        &b5,
        &letter,
        &legal,
        &tabloid,
        &executive,
        &japanese_postcard,
        &japanese_envelope_you4
};

const PaperSourceCap* papersources[] = {
        &autobin,
        &manual,
        &upper,
        &middle,
        &lower
};

const ResolutionCap* resolutions[] = {
        &dpi1200,
        &dpi600,
        &dpi300
};

const PrintStyleCap* printstyles[] = {
        &simplex,
        &duplex,
        &booklet
};

const BindingLocationCap *bindinglocations[] = {
        &longedge1,
        &longedge2,
        &shortedge1,
        &shortedge2
};

const ColorCap color("Color", false, JobData::kColor);
const ColorCap monochrome("Shades of Gray", true, JobData::kMonochrome);

const ColorCap* colors[] = {
        &color,
        &monochrome
};


int
Lips4Cap::CountCap(CapID capid) const
{
        switch (capid) {
                case kPaper:
                        return sizeof(papers) / sizeof(papers[0]);
                case kPaperSource:
                        return sizeof(papersources) / sizeof(papersources[0]);
                case kResolution:
                        return sizeof(resolutions) / sizeof(resolutions[0]);
                case kPrintStyle:
                        return sizeof(printstyles) / sizeof(printstyles[0]);
                case kBindingLocation:
                        return sizeof(bindinglocations) / sizeof(bindinglocations[0]);
                case kColor:
                        return sizeof(colors) / sizeof(colors[0]);
                default:
                        return 0;
                }
}


const BaseCap**
Lips4Cap::GetCaps(CapID capid) const
{
        switch (capid) {
                case kPaper:
                        return (const BaseCap **)papers;
                case kPaperSource:
                        return (const BaseCap **)papersources;
                case kResolution:
                        return (const BaseCap **)resolutions;
                case kPrintStyle:
                        return (const BaseCap **)printstyles;
                case kBindingLocation:
                        return (const BaseCap **)bindinglocations;
                case kColor:
                        return (const BaseCap **)colors;
                default:
                        return NULL;
        }
}


bool
Lips4Cap::Supports(CapID capid) const
{
        switch (capid) {
                case kPaper:
                case kPaperSource:
                case kResolution:
                case kPrintStyle:
                case kBindingLocation:
                case kColor:
                case kCopyCommand:
                case kHalftone:
                        return true;
                default:
                        return false;
                }
}