root/src/add-ons/print/drivers/gutenprint/GPPrinterDriver.cpp
/*
 * GPEntry.cpp
 * Copyright 1999-2000 Y.Takagi. All Rights Reserved.
 * Copyright 2010 Michael Pfeiffer.
 */


#include <Debug.h>

#include "GPDriver.h"
#include "GPCapabilities.h"
#include "GPData.h"
#include "PrinterDriver.h"
#include "SelectPrinterDialog.h"


class GPPrinterDriver : public PrinterDriver
{
public:
        GPPrinterDriver(BNode* printerFolder)
                :
                PrinterDriver(printerFolder)
                {
                }

        const char*     GetSignature() const
                                {
                                        return "application/x-vnd.gutenprint";
                                }
        
        const char*     GetDriverName() const
                                {
                                        return "Gutenprint";
                                }
        
        const char*     GetVersion() const
                                {
                                        return "1.0";
                                }
        
        const char*     GetCopyright() const
                                {
                                        return "Gutenprint driver "
                                                "Copyright © 2010 Michael Pfeiffer.\n";
                                }

        char*           AddPrinter(char *printerName)
                                {
                                        GPData* data = dynamic_cast<GPData*>(GetPrinterData());
                                        ASSERT(data != NULL);

                                        SelectPrinterDialog* dialog =
                                                new SelectPrinterDialog(data);

                                        if (dialog->Go() != B_OK)
                                                return NULL;

                                        return printerName;
                                }

        PrinterData*    InstantiatePrinterData(BNode* node)
                                {
                                        return new GPData(node);
                                }

        PrinterCap* InstantiatePrinterCap(PrinterData* printerData) 
                                {
                                        return new GPCapabilities(printerData);
                                }
        
        GraphicsDriver* InstantiateGraphicsDriver(BMessage* settings,
                PrinterData* printerData, PrinterCap* printerCap)
                                {
                                        return new GPDriver(settings, printerData, printerCap);
                                }
};


PrinterDriver* instantiate_printer_driver(BNode* printerFolder)
{
        return new GPPrinterDriver(printerFolder);
}