#include "PrintTestApp.hpp"
#include "PrintTestWindow.hpp"
#include <PrintJob.h>
#define your_document_last_page 100
int main()
{
new PrintTestApp;
be_app->Run();
delete be_app;
return 0;
}
PrintTestApp::PrintTestApp()
: Inherited(PRINTTEST_SIGNATURE)
{
}
void PrintTestApp::MessageReceived(BMessage* msg)
{
switch(msg->what) {
case 'PStp':
DoTestPageSetup();
break;
case 'Prnt':
Print();
break;
}
}
void PrintTestApp::ReadyToRun()
{
(new PrintTestWindow)->Show();
}
status_t PrintTestApp::DoTestPageSetup()
{
BPrintJob job("document's name");
status_t result = job.ConfigPage();
if (result == B_OK) {
fSetupData = job.Settings();
fPaperRect = job.PaperRect();
fPrintableRect = job.PrintableRect();
}
return result;
}
status_t PrintTestApp::Print()
{
status_t result = B_OK;
if (!fSetupData) {
result = DoTestPageSetup();
}
BPrintJob job("document's name");
if (result == B_OK) {
job.SetSettings(fSetupData);
result = job.ConfigJob();
if (result == B_OK) {
if (fSetupData == NULL) {
}
delete fSetupData;
fSetupData = job.Settings();
fPaperRect = job.PaperRect();
fPrintableRect = job.PrintableRect();
int32 firstPage = job.FirstPage();
int32 lastPage = job.LastPage();
if (lastPage > your_document_last_page)
lastPage = your_document_last_page;
int32 nbPages = lastPage - firstPage + 1;
if (nbPages <= 0)
return B_ERROR;
job.BeginJob();
bool can_continue = job.CanContinue();
for (int i=firstPage ; can_continue && i<=lastPage ; i++) {
// If the document have a lot of pages, you can update a BStatusBar, here
// or else what you want...
update_status_bar(i-firstPage, nbPages);
*/
job.SpoolPage();
// Cancel the job if needed.
// You can for exemple verify if the user pressed the ESC key
// or (SHIFT + '.')...
if (user_has_canceled)
{
// tell the print_server to cancel the printjob
job.CancelJob();
can_continue = false;
break;
}
*/
can_continue = job.CanContinue();
}
if (can_continue)
job.CommitJob();
else
result = B_ERROR;
}
}
return result;
}