示例#1
0
void 
StatusWindow::WaitForClose()
{
	fCloseSem = create_sem(0, "close_sem");
	
	Lock();
		Report* r = Report::Instance();
		char b[80];
		sprintf(b, "%d Infos, %d Warnings, %d Errors", r->Count(kInfo),
			r->Count(kWarning), r->Count(kError)); 
		fPageLabel->SetText(b);
		fCancel->SetLabel("Close");
		fCancel->SetEnabled(true);
		UpdateReport();
		
		bool hasErrors = r->Count(kError);
		bool hasErrorsOrWarnings = hasErrors || r->Count(kWarning);
		bool hasErrorsWarningsOrInfo = hasErrorsOrWarnings || r->Count(kInfo);
		
		if (fCloseOption == kAlways
			|| (fCloseOption == kNoErrors && !hasErrors)
			|| (fCloseOption == kNoErrorsOrWarnings && !hasErrorsOrWarnings)
			|| (fCloseOption == kNoErrorsWarningsOrInfo 
			&& !hasErrorsWarningsOrInfo)) {
			PostMessage(kCancelMsg);
		}
	Unlock();
	
	acquire_sem(fCloseSem);
	delete_sem(fCloseSem);
}