Report: ChoosePrinter, ChooseDefaultPrinter - selects printer before rendering report, renders to chosen paper size

git-svn-id: svn://ultimatepp.org/upp/trunk@1668 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2009-10-28 19:02:39 +00:00
parent 26ccdf5560
commit 86d4ce73ad
5 changed files with 46 additions and 13 deletions

View file

@ -71,6 +71,7 @@ public:
PrinterJob& MinMaxPage(int minpage, int maxpage);
PrinterJob& PageCount(int n) { return MinMaxPage(0, n - 1); }
PrinterJob& CurrentPage(int currentpage);
PrinterJob& Name(const char *_name) { name = _name; return *this; }
PrinterJob(const char *name = NULL);
~PrinterJob();

View file

@ -301,9 +301,9 @@ bool DocReport::Print0(int i, const char *_name) {
dlg.nFromPage = dlg.nMinPage;
dlg.nToPage = dlg.nMaxPage;
}
Size sz = w.GetPageMMs();
int x = (6000 * sz.cx / 254 - pgsz.cx) / 2;
int y = (6000 * sz.cy / 254 - pgsz.cy) / 2;
Size sz = w.GetPageSize();
int x = (sz.cx - pgsz.cx) / 2;
int y = (sz.cy - pgsz.cy) / 2;
for(int c = 0; c < ((dlg.Flags & PD_COLLATE) ? dlg.nCopies : 1); c++)
for(i = dlg.nFromPage - 1; i <= dlg.nToPage - 1; i++)
for(int c = 0; c < ((dlg.Flags & PD_COLLATE) ? 1 : dlg.nCopies); c++) {

View file

@ -163,4 +163,27 @@ void Report::Put(const char *qtf)
Put(ParseQTF(qtf));
}
bool Report::ChoosePrinter(const char *jobname)
{
printerjob.Create();
printerjob->Name(jobname);
if(!printerjob->Execute()) {
printerjob.Clear();
return false;
}
SetPageSize(printerjob->GetDraw().GetPageSize());
return true;
}
bool Report::ChooseDefaultPrinter(const char *jobname)
{
printerjob.Create();
printerjob->Name(jobname);
Size sz = printerjob->GetDraw().GetPageSize();
if(sz.cx == 0 || sz.cy == 0)
return false;
SetPageSize(sz);
return true;
}
END_UPP_NAMESPACE

View file

@ -14,12 +14,13 @@ public:
virtual Draw& Page(int i);
private:
Array<Drawing> page;
int pagei;
int y;
String header, footer;
int headercy, headerspc, footercy, footerspc;
Point mg;
Array<Drawing> page;
int pagei;
int y;
String header, footer;
int headercy, headerspc, footercy, footerspc;
Point mg;
One<PrinterJob> printerjob;
void Flush();
String FormatHF(const char *s, int pageno);
@ -27,7 +28,7 @@ private:
void PaintHF(Draw& w, int y, const char *qtf, int i);
void StartPage(int i);
void RestartPage();
public:
int GetCount() { Flush(); return page.GetCount(); }
Drawing GetPage(int i) { Flush(); return page[i]; }
@ -52,6 +53,10 @@ public:
Point GetMargins() const { return mg; }
bool ChoosePrinter(const char *jobname = t_("Report"));
bool ChooseDefaultPrinter(const char *jobname = t_("Report"));
PrinterJob *GetPrinterJob() { return ~printerjob; }
Report& SetPageSize(Size sz);
Report& SetPageSize(int cx, int cy) { return SetPageSize(Size(cx, cy)); }
Report& Landscape();

View file

@ -7,14 +7,14 @@ NAMESPACE_UPP
void Print(Report& r, PrinterJob& pd, bool center)
{
Draw& w = pd;
Size sz = w.GetPageMMs();
Size sz = w.GetPageSize();
Point mg = r.GetMargins();
Size pgsz = r.GetPage(0).GetSize();
int x = 0;
int y = 0;
if(center) {
x = Nvl(mg.x, (6000 * sz.cx / 254 - pgsz.cx) / 2);
y = Nvl(mg.y, (6000 * sz.cy / 254 - pgsz.cy) / 2);
x = Nvl(mg.x, (sz.cx - pgsz.cx) / 2);
y = Nvl(mg.y, (sz.cy - pgsz.cy) / 2);
}
for(int i = 0; i < pd.GetPageCount(); i++) {
Drawing iw = r.GetPage(pd[i]);
@ -26,6 +26,10 @@ void Print(Report& r, PrinterJob& pd, bool center)
}
bool Print0(Report& r, int i, const char *_name, bool dodlg) {
if(r.GetPrinterJob()) {
Print(r, *r.GetPrinterJob());
return true;
}
PrinterJob pd(_name);
pd.CurrentPage(i);
pd.MinMaxPage(0, r.GetCount() - 1);