void CmOutputDriver(void) { struct objlist *graobj, *g2wobj; int id, g2wid, g2woid; N_VALUE *g2winst; int ret; struct savedstdio stdio; if (Menulock || Globallock) return; if (Menulocal.select_data && ! SetFileHidden()) return; FileAutoScale(); AdjustAxis(); graobj = chkobject("gra"); if (graobj == NULL) return; g2wobj = chkobject("gra2prn"); if (g2wobj == NULL) return; g2wid = newobj(g2wobj); if (g2wid < 0) return; DriverDialog(&DlgDriver, g2wobj, g2wid); ret = DialogExecute(TopLevel, &DlgDriver); if (ret == IDOK) { SetStatusBar(_("Spawning external driver.")); g2winst = chkobjinst(g2wobj, g2wid); _getobj(g2wobj, "oid", g2winst, &g2woid); id = newobj(graobj); init_graobj(graobj, id, "gra2prn", g2woid); ignorestdio(&stdio); draw_gra(graobj, id, _("Drawing."), TRUE); restorestdio(&stdio); delobj(graobj, id); ResetStatusBar(); } delobj(g2wobj, g2wid); if (Menulocal.select_data) { FileWinUpdate(NgraphApp.FileWin.data.data, TRUE); } }
static void draw_gra(struct objlist *graobj, int id, char *msg, int close) { ProgressDialogCreate(msg); SetStatusBar(msg); if (exeobj(graobj, "open", id, 0, NULL) == 0) { exeobj(graobj, "draw", id, 0, NULL); exeobj(graobj, "flush", id, 0, NULL); if (close) { exeobj(graobj, "close", id, 0, NULL); } } ProgressDialogFinalize(); ResetStatusBar(); main_window_redraw(); }
StatusWindow::StatusWindow(bool oddPages, bool evenPages, uint32 firstPage, uint32 numPages, uint32 numCopies, uint32 nup) : BWindow (BRect(200, 200, 650, 270), "Print Status", B_DOCUMENT_WINDOW, B_NOT_RESIZABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE) { // oddPages - if true, only print odd umbered pages // evenPages - if true, only print even umbered pages // firstPage - number of first page // numPages - total number of pages (must be recalculate if odd/even is used) // numCopies - total number of document copies BRect frame = Frame(); // the status view frame.OffsetTo(B_ORIGIN); fStatusView = new BView(frame,"Status View",B_FOLLOW_ALL, B_WILL_DRAW); fStatusView->SetViewColor(216,216,216); AddChild(fStatusView); // the status bar fStatusBar = new BStatusBar(BRect(10, 15, 245, 50),"Status Bar","Page: "); fStatusView->AddChild(fStatusBar); // the cancel button fHideButton = new BButton(BRect(260, 25, 330,50),"Hide Button","Hide Status", new BMessage(HIDE_MSG)); fHideButton->ResizeToPreferred(); fStatusView->AddChild(fHideButton); fCancelButton = new BButton(BRect(260, 25, 330,50),"Cancel Button","Cancel", new BMessage(CANCEL_MSG)); fCancelButton->ResizeToPreferred(); fCancelButton->MoveBy(90,0); fStatusView->AddChild(fCancelButton); fCancelBar = false; // calculate the real number of pages fNops = numPages; bool evenFirstPage = (firstPage % 2) == 0; bool evenNumPages = (numPages % 2) == 0; // recalculate page numbers if even or odd is used if (oddPages || evenPages) { if (evenNumPages) { fNops = numPages / 2; } else if (evenFirstPage) { if (oddPages) fNops = (numPages - 1) / 2; if (evenPages) fNops = (numPages + 1) / 2; } else { if (oddPages) fNops = (numPages + 1) / 2; if (evenPages) fNops = (numPages - 1) / 2; } } uint32 addPage = 0; if (fNops % nup > 0) addPage = 1; fNops = (uint32) ( fNops/(float)nup ) + addPage; // recalculate page numbers nup-pages-up fStatusBar->SetMaxValue ((float)fNops); // max value of status bar = real number of pages fDelta = 1.0/numCopies; // reduce step width of status bar fStatusDelta = fDelta; fDocCopies = numCopies; fDocumentCopy = fDocCopies > 1; fDocCopies++; ResetStatusBar(); Show(); }