void EbookController::SetDoc(Doc newDoc, int startReparseIdxArg) { CrashIf(!newDoc.IsEbook()); startReparseIdx = startReparseIdxArg; if ((size_t)startReparseIdx >= newDoc.GetHtmlDataSize()) startReparseIdx = -1; CloseCurrentDocument(); doc = newDoc; TriggerBookFormatting(); }
static void ShowProperties(HWND parent, Doc doc, DisplayModel *dm, bool extended=false) { PropertiesLayout *layoutData = FindPropertyWindowByParent(parent); if (layoutData) { SetActiveWindow(layoutData->hwnd); return; } if (!doc.IsEngine() && !doc.IsEbook()) return; layoutData = new PropertiesLayout(); gPropertiesWindows.Append(layoutData); GetProps(doc, layoutData, dm, extended); if (!CreatePropertiesWindow(parent, layoutData)) delete layoutData; }
static void GetProps(Doc doc, PropertiesLayout *layoutData, DisplayModel *dm, bool extended) { CrashIf(!doc.IsEngine() && !doc.IsEbook()); DocType engineType = doc.GetDocType(); WCHAR *str = str::Dup(gPluginMode ? gPluginURL : doc.GetFilePath()); layoutData->AddProperty(_TR("File:"), str); str = doc.GetProperty(Prop_Title); layoutData->AddProperty(_TR("Title:"), str); str = doc.GetProperty(Prop_Subject); layoutData->AddProperty(_TR("Subject:"), str); str = doc.GetProperty(Prop_Author); layoutData->AddProperty(_TR("Author:"), str); str = doc.GetProperty(Prop_Copyright); layoutData->AddProperty(_TR("Copyright:"), str); str = doc.GetProperty(Prop_CreationDate); if (Engine_PDF == engineType) ConvDateToDisplay(&str, PdfDateParse); else if (Engine_XPS == engineType) ConvDateToDisplay(&str, IsoDateParse); else if (Engine_Epub == engineType || Doc_Epub == engineType) ConvDateToDisplay(&str, IsoDateParse); else if (Engine_Mobi == engineType || Doc_Mobi == engineType) ConvDateToDisplay(&str, IsoDateParse); layoutData->AddProperty(_TR("Created:"), str); str = doc.GetProperty(Prop_ModificationDate); if (Engine_PDF == engineType) ConvDateToDisplay(&str, PdfDateParse); else if (Engine_XPS == engineType) ConvDateToDisplay(&str, IsoDateParse); else if (Engine_Epub == engineType || Doc_Epub == engineType) ConvDateToDisplay(&str, IsoDateParse); else if (Engine_Mobi == engineType || Doc_Mobi == engineType) ConvDateToDisplay(&str, IsoDateParse); layoutData->AddProperty(_TR("Modified:"), str); str = doc.GetProperty(Prop_CreatorApp); layoutData->AddProperty(_TR("Application:"), str); str = doc.GetProperty(Prop_PdfProducer); // TODO: remove PDF from string layoutData->AddProperty(_TR("PDF Producer:"), str); str = doc.GetProperty(Prop_PdfVersion); layoutData->AddProperty(_TR("PDF Version:"), str); str = FormatPdfFileStructure(doc); layoutData->AddProperty(_TR("PDF Optimizations:"), str); size_t fileSize = file::GetSize(doc.GetFilePath()); if (fileSize == INVALID_FILE_SIZE && doc.IsEngine()) free(doc.AsEngine()->GetFileData(&fileSize)); if (fileSize != INVALID_FILE_SIZE) { str = FormatFileSize(fileSize); layoutData->AddProperty(_TR("File Size:"), str); } if (doc.IsEngine()) { str = str::Format(L"%d", doc.AsEngine()->PageCount()); layoutData->AddProperty(_TR("Number of Pages:"), str); } if (dm && dm->engineType != Engine_Chm) { str = FormatPageSize(dm->engine, dm->CurrentPageNo(), dm->Rotation()); if (IsUIRightToLeft() && IsVistaOrGreater()) { // ensure that the size remains ungarbled left-to-right // (note: XP doesn't know about \u202A...\u202C) str = str::Format(L"\u202A%s\u202C", ScopedMem<WCHAR>(str)); } layoutData->AddProperty(_TR("Page Size:"), str); } str = FormatPermissions(doc); layoutData->AddProperty(_TR("Denied Permissions:"), str); #if defined(DEBUG) || defined(ENABLE_EXTENDED_PROPERTIES) if (extended) { // TODO: FontList extraction can take a while str = doc.GetProperty(Prop_FontList); if (str) { // add a space between basic and extended file properties layoutData->AddProperty(L" ", str::Dup(L" ")); } layoutData->AddProperty(_TR("Fonts:"), str); } #endif }
EbookFormattingThread::EbookFormattingThread(Doc doc, HtmlFormatterArgs *args, EbookController *ctrl) : doc(doc), formatterArgs(args), controller(ctrl), pageCount(0) { AssertCrash(doc.IsEbook() || (doc.IsNone() && (NULL != args->htmlStr))); }