#pragma once
#include <dns_sd.h>
#include <string>
#include <list>
#include <DebugServices.h>
class CPrinterSetupWizardSheet;
#define kDefaultPriority 50
#define kDefaultQTotal 1
namespace PrinterSetupWizard
{
struct Printer;
struct Service;
struct Queue;
struct Manufacturer;
struct Model;
typedef std::list<Queue*> Queues;
typedef std::list<Printer*> Printers;
typedef std::list<Service*> Services;
typedef std::list<Model*> Models;
struct Printer
{
Printer();
~Printer();
Service*
LookupService
(
const std::string & type
);
CPrinterSetupWizardSheet * window;
HTREEITEM item;
std::string name;
CString displayName;
CString actualName;
Services services;
bool driverInstalled;
CString infFileName;
CString manufacturer;
CString displayModelName;
CString modelName;
CString portName;
bool deflt;
bool isCUPSPrinter;
unsigned resolving;
bool installed;
};
struct Service
{
Service();
~Service();
Queue*
SelectedQueue();
void
EmptyQueues();
Printer * printer;
uint32_t ifi;
std::string type;
std::string domain;
DNSServiceRef serviceRef;
CString hostname;
unsigned short portNumber;
CString protocol;
unsigned short qtotal;
Queues queues;
unsigned refs;
};
struct Queue
{
Queue();
~Queue();
CString name;
uint32_t priority;
CString pdl;
CString usb_MFG;
CString usb_MDL;
CString description;
CString location;
CString product;
};
struct Manufacturer
{
CString name;
Models models;
Model*
find( const CString & name );
};
struct Model
{
bool driverInstalled;
CString infFileName;
CString displayName;
CString name;
};
inline
Printer::Printer()
:
isCUPSPrinter( false )
{
}
inline
Printer::~Printer()
{
while ( services.size() > 0 )
{
Service * service = services.front();
services.pop_front();
delete service;
}
}
inline Service*
Printer::LookupService
(
const std::string & type
)
{
Services::iterator it;
for ( it = services.begin(); it != services.end(); it++ )
{
Service * service = *it;
if ( strcmp(service->type.c_str(), type.c_str()) == 0 )
{
return service;
}
}
return NULL;
}
inline
Service::Service()
:
qtotal(kDefaultQTotal)
{
}
inline
Service::~Service()
{
check( serviceRef == NULL );
EmptyQueues();
}
inline Queue*
Service::SelectedQueue()
{
return queues.front();
}
inline void
Service::EmptyQueues()
{
while ( queues.size() > 0 )
{
Queue * q = queues.front();
queues.pop_front();
delete q;
}
}
inline
Queue::Queue()
:
priority(kDefaultPriority)
{
}
inline
Queue::~Queue()
{
}
inline Model*
Manufacturer::find( const CString & name )
{
Models::iterator it;
for ( it = models.begin(); it != models.end(); it++ )
{
Model * model = *it;
if ( model->name == name )
{
return model;
}
}
return NULL;
}
}