|
|
|
@@ -1,14 +1,17 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright 2001-2010, Haiku.
|
|
|
|
|
* Copyright 2001-2011, Haiku.
|
|
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
|
*
|
|
|
|
|
* Authors:
|
|
|
|
|
* Michael Pfeiffer
|
|
|
|
|
* Philippe Houdoin
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "PrintersWindow.h"
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
// BeOS API
|
|
|
|
|
#include <Application.h>
|
|
|
|
|
#include <Button.h>
|
|
|
|
@@ -16,6 +19,7 @@
|
|
|
|
|
#include <FindDirectory.h>
|
|
|
|
|
#include <ListView.h>
|
|
|
|
|
#include <Locale.h>
|
|
|
|
|
#include <PrintJob.h>
|
|
|
|
|
#include <ScrollView.h>
|
|
|
|
|
|
|
|
|
|
#include "pr_server.h"
|
|
|
|
@@ -38,7 +42,7 @@ PrintersWindow::PrintersWindow(BRect frame)
|
|
|
|
|
fSelectedPrinter(NULL),
|
|
|
|
|
fAddingPrinter(false)
|
|
|
|
|
{
|
|
|
|
|
BuildGUI();
|
|
|
|
|
_BuildGUI();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -74,8 +78,8 @@ PrintersWindow::MessageReceived(BMessage* msg)
|
|
|
|
|
fSelectedPrinter = NULL;
|
|
|
|
|
fJobListView->SetSpoolFolder(NULL);
|
|
|
|
|
}
|
|
|
|
|
UpdateJobButtons();
|
|
|
|
|
UpdatePrinterButtons();
|
|
|
|
|
_UpdateJobButtons();
|
|
|
|
|
_UpdatePrinterButtons();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -109,11 +113,19 @@ PrintersWindow::MessageReceived(BMessage* msg)
|
|
|
|
|
setActivePrinter.AddSpecifier("ActivePrinter");
|
|
|
|
|
setActivePrinter.AddString("data", printer->Name());
|
|
|
|
|
msgr.SendMessage(&setActivePrinter);
|
|
|
|
|
UpdatePrinterButtons();
|
|
|
|
|
_UpdatePrinterButtons();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case kMsgPrintTestPage:
|
|
|
|
|
{
|
|
|
|
|
fSelectedPrinter = fPrinterListView->SelectedItem();
|
|
|
|
|
if (fSelectedPrinter)
|
|
|
|
|
PrintTestPage(fSelectedPrinter);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case kMsgCancelJob:
|
|
|
|
|
fJobListView->CancelJob();
|
|
|
|
|
break;
|
|
|
|
@@ -123,7 +135,7 @@ PrintersWindow::MessageReceived(BMessage* msg)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case kMsgJobSelected:
|
|
|
|
|
UpdateJobButtons();
|
|
|
|
|
_UpdateJobButtons();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case B_PRINTER_CHANGED:
|
|
|
|
@@ -151,7 +163,66 @@ PrintersWindow::MessageReceived(BMessage* msg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::BuildGUI()
|
|
|
|
|
PrintersWindow::PrintTestPage(PrinterItem* printer)
|
|
|
|
|
{
|
|
|
|
|
BPrintJob job("TestPage");
|
|
|
|
|
job.ConfigPage();
|
|
|
|
|
BMessage* settings = job.Settings();
|
|
|
|
|
|
|
|
|
|
printf("print job settings:\n");
|
|
|
|
|
settings->PrintToStream();
|
|
|
|
|
|
|
|
|
|
BRect pageRect = job.PrintableRect();
|
|
|
|
|
|
|
|
|
|
job.BeginJob();
|
|
|
|
|
|
|
|
|
|
// TestPageView testPage(pageRect, printer);
|
|
|
|
|
// job.DrawView(testPage, pageRect, BPoint(0.0, 0.0));
|
|
|
|
|
job.SpoolPage();
|
|
|
|
|
if (!job.CanContinue())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
job.CommitJob();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::AddJob(SpoolFolder* folder, Job* job)
|
|
|
|
|
{
|
|
|
|
|
if (_IsSelected(folder->Item()))
|
|
|
|
|
fJobListView->AddJob(job);
|
|
|
|
|
fPrinterListView->UpdateItem(folder->Item());
|
|
|
|
|
_UpdatePrinterButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::RemoveJob(SpoolFolder* folder, Job* job)
|
|
|
|
|
{
|
|
|
|
|
if (_IsSelected(folder->Item()))
|
|
|
|
|
fJobListView->RemoveJob(job);
|
|
|
|
|
fPrinterListView->UpdateItem(folder->Item());
|
|
|
|
|
_UpdatePrinterButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::UpdateJob(SpoolFolder* folder, Job* job)
|
|
|
|
|
{
|
|
|
|
|
if (_IsSelected(folder->Item())) {
|
|
|
|
|
fJobListView->UpdateJob(job);
|
|
|
|
|
_UpdateJobButtons();
|
|
|
|
|
}
|
|
|
|
|
fPrinterListView->UpdateItem(folder->Item());
|
|
|
|
|
_UpdatePrinterButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #pragma mark -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::_BuildGUI()
|
|
|
|
|
{
|
|
|
|
|
const float boxInset = 10.0;
|
|
|
|
|
BRect r(Bounds());
|
|
|
|
@@ -201,6 +272,17 @@ PrintersWindow::BuildGUI()
|
|
|
|
|
if (fMakeDefault->Bounds().Width() > maxWidth)
|
|
|
|
|
maxWidth = fMakeDefault->Bounds().Width();
|
|
|
|
|
|
|
|
|
|
// Print Test Page button
|
|
|
|
|
fPrintTestPage = new BButton(BRect(5,60,5,60), "print_test_page",
|
|
|
|
|
B_TRANSLATE("Print test page"), new BMessage(kMsgPrintTestPage),
|
|
|
|
|
B_FOLLOW_RIGHT);
|
|
|
|
|
printersBox->AddChild(fPrintTestPage);
|
|
|
|
|
fPrintTestPage->ResizeToPreferred();
|
|
|
|
|
|
|
|
|
|
if (fPrintTestPage->Bounds().Width() > maxWidth)
|
|
|
|
|
maxWidth = fPrintTestPage->Bounds().Width();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Resize all buttons to maximum width and align them to the right
|
|
|
|
|
float xPos = printersBox->Bounds().Width() - boxInset - maxWidth;
|
|
|
|
|
addButton->MoveTo(xPos, boxInset + 8);
|
|
|
|
@@ -214,9 +296,16 @@ PrintersWindow::BuildGUI()
|
|
|
|
|
boxInset + fRemove->Bounds().Height() + boxInset + 8);
|
|
|
|
|
fMakeDefault->ResizeTo(maxWidth, fMakeDefault->Bounds().Height());
|
|
|
|
|
|
|
|
|
|
fPrintTestPage->MoveTo(xPos, boxInset + addButton->Bounds().Height() +
|
|
|
|
|
boxInset + fRemove->Bounds().Height() +
|
|
|
|
|
boxInset + fMakeDefault->Bounds().Height() + boxInset + 8);
|
|
|
|
|
fPrintTestPage->ResizeTo(maxWidth, fPrintTestPage->Bounds().Height());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Disable all selection-based buttons
|
|
|
|
|
fRemove->SetEnabled(false);
|
|
|
|
|
fMakeDefault->SetEnabled(false);
|
|
|
|
|
fPrintTestPage->SetEnabled(false);
|
|
|
|
|
|
|
|
|
|
// Create listview with scroller
|
|
|
|
|
BRect listBounds(boxInset, boxInset + 8,
|
|
|
|
@@ -289,55 +378,24 @@ PrintersWindow::BuildGUI()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
PrintersWindow::IsSelected(PrinterItem* printer)
|
|
|
|
|
PrintersWindow::_IsSelected(PrinterItem* printer)
|
|
|
|
|
{
|
|
|
|
|
return fSelectedPrinter && fSelectedPrinter == printer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::AddJob(SpoolFolder* folder, Job* job)
|
|
|
|
|
{
|
|
|
|
|
if (IsSelected(folder->Item()))
|
|
|
|
|
fJobListView->AddJob(job);
|
|
|
|
|
fPrinterListView->UpdateItem(folder->Item());
|
|
|
|
|
UpdatePrinterButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::RemoveJob(SpoolFolder* folder, Job* job)
|
|
|
|
|
{
|
|
|
|
|
if (IsSelected(folder->Item()))
|
|
|
|
|
fJobListView->RemoveJob(job);
|
|
|
|
|
fPrinterListView->UpdateItem(folder->Item());
|
|
|
|
|
UpdatePrinterButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::UpdateJob(SpoolFolder* folder, Job* job)
|
|
|
|
|
{
|
|
|
|
|
if (IsSelected(folder->Item())) {
|
|
|
|
|
fJobListView->UpdateJob(job);
|
|
|
|
|
UpdateJobButtons();
|
|
|
|
|
}
|
|
|
|
|
fPrinterListView->UpdateItem(folder->Item());
|
|
|
|
|
UpdatePrinterButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::UpdatePrinterButtons()
|
|
|
|
|
PrintersWindow::_UpdatePrinterButtons()
|
|
|
|
|
{
|
|
|
|
|
PrinterItem* item = fPrinterListView->SelectedItem();
|
|
|
|
|
fRemove->SetEnabled(item && !item->HasPendingJobs());
|
|
|
|
|
fMakeDefault->SetEnabled(item && !item->IsActivePrinter());
|
|
|
|
|
fPrintTestPage->SetEnabled(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
PrintersWindow::UpdateJobButtons()
|
|
|
|
|
PrintersWindow::_UpdateJobButtons()
|
|
|
|
|
{
|
|
|
|
|
JobItem* item = fJobListView->SelectedItem();
|
|
|
|
|
if (item != NULL) {
|
|
|
|
@@ -349,3 +407,5 @@ PrintersWindow::UpdateJobButtons()
|
|
|
|
|
fRestart->SetEnabled(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|