// gets pages as formatted from beginning, either from a temporary state // when layout is in progress or final formatted pages Vec<HtmlPage*> *EbookController::GetPagesFromBeginning() { if (pagesFromBeginning) { CrashIf(FormattingInProgress()); return pagesFromBeginning; } if (FormattingInProgress() && (0 != formattingTemp.pagesFromBeginning.Count())) return &formattingTemp.pagesFromBeginning; return NULL; }
// show the status text based on current state void EbookController::UpdateStatus() { UpdateCurrPageNoForPage(pageShown); size_t pageCount = GetMaxPageCount(); if (fileBeingLoaded) { ScopedMem<WCHAR> s(str::Format(_TR("Loading file %s..."), fileBeingLoaded)); ctrls->status->SetText(s.Get()); ctrls->progress->SetFilled(0.f); return; } if (FormattingInProgress()) { ScopedMem<WCHAR> s(str::Format(_TR("Formatting the book... %d pages"), pageCount)); ctrls->status->SetText(s); ctrls->progress->SetFilled(0.f); return; } ScopedMem<WCHAR> s(str::Format(L"%s %d / %d", _TR("Page:"), currPageNo, pageCount)); ctrls->status->SetText(s); if (GetPagesFromBeginning()) ctrls->progress->SetFilled(PercFromInt(GetPagesFromBeginning()->Count(), currPageNo)); else ctrls->progress->SetFilled(0.f); }
// if we're showing a temp page, it must be part of some collection that we're // about to delete. Remove the page from its collection so that it doesn't get // deleted along with it. The caller must assume ownership of the object HtmlPage *EbookController::PreserveTempPageShown() { if (!pageShown) return NULL; if (deletePageShown) { // TODO: this can happen due to a race condition // (if there are too many WM_PAINT messages?) CrashIf(true); // not sure if this should ever happen deletePageShown = false; return pageShown; } if (FormattingInProgress()) { CrashIf(pagesFromBeginning || pagesFromPage); if (formattingTemp.pagesFromBeginning.Remove(pageShown)) return pageShown; if (formattingTemp.pagesFromPage.Remove(pageShown)) return pageShown; CrashIf(true); // where did the page come from? return NULL; } if (pagesFromBeginning && pagesFromBeginning->Remove(pageShown)) return pageShown; if (pagesFromPage && pagesFromPage->Remove(pageShown)) return pageShown; CrashIf(true); // where did the page come from? return NULL; }
int EbookController::GetMaxPageCount() const { Vec<HtmlPage *> *pagesTmp = pages; if (incomingPages) { CrashIf(!FormattingInProgress()); pagesTmp = incomingPages; } if (!pagesTmp) return 0; return (int)pagesTmp->Count(); }
size_t EbookController::GetMaxPageCount() { Vec<HtmlPage *> *pages1 = pagesFromBeginning; Vec<HtmlPage *> *pages2 = pagesFromPage; if (FormattingInProgress()) { CrashIf(pages1 || pages2); pages1 = &formattingTemp.pagesFromBeginning; pages2 = &formattingTemp.pagesFromPage; } size_t n = 0; if (pages1 && pages1->Count() > n) n = pages1->Count(); if (pages2 && pages2->Count() > n) n = pages2->Count(); return n; }
// show the status text based on current state void EbookController::UpdateStatus() { int pageCount = GetMaxPageCount(); if (FormattingInProgress()) { ScopedMem<WCHAR> s(str::Format(_TR("Formatting the book... %d pages"), pageCount)); ctrls->status->SetText(s); ctrls->progress->SetFilled(0.f); return; } ScopedMem<WCHAR> s(str::Format(L"%s %d / %d", _TR("Page:"), currPageNo, pageCount)); ctrls->status->SetText(s); #if 1 ctrls->progress->SetFilled(PercFromInt(pageCount, currPageNo)); #else if (GetPages()) ctrls->progress->SetFilled(PercFromInt(pageCount, currPageNo)); else ctrls->progress->SetFilled(0.f); #endif }