Beispiel #1
0
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);
  }
}
Beispiel #2
0
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();
}
Beispiel #3
0
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();
}