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 }
static void GetProps(Controller *ctrl, PropertiesLayout *layoutData, bool extended) { CrashIf(!ctrl); WCHAR *str = str::Dup(gPluginMode ? gPluginURL : ctrl->FilePath()); layoutData->AddProperty(_TR("File:"), str, true); str = ctrl->GetProperty(Prop_Title); layoutData->AddProperty(_TR("Title:"), str); str = ctrl->GetProperty(Prop_Subject); layoutData->AddProperty(_TR("Subject:"), str); str = ctrl->GetProperty(Prop_Author); layoutData->AddProperty(_TR("Author:"), str); str = ctrl->GetProperty(Prop_Copyright); layoutData->AddProperty(_TR("Copyright:"), str); str = ctrl->GetProperty(Prop_CreationDate); if (str && ctrl->AsFixed() && Engine_PDF == ctrl->AsFixed()->engineType) ConvDateToDisplay(&str, PdfDateParse); else ConvDateToDisplay(&str, IsoDateParse); layoutData->AddProperty(_TR("Created:"), str); str = ctrl->GetProperty(Prop_ModificationDate); if (str && ctrl->AsFixed() && Engine_PDF == ctrl->AsFixed()->engineType) ConvDateToDisplay(&str, PdfDateParse); else ConvDateToDisplay(&str, IsoDateParse); layoutData->AddProperty(_TR("Modified:"), str); str = ctrl->GetProperty(Prop_CreatorApp); layoutData->AddProperty(_TR("Application:"), str); str = ctrl->GetProperty(Prop_PdfProducer); layoutData->AddProperty(_TR("PDF Producer:"), str); str = ctrl->GetProperty(Prop_PdfVersion); layoutData->AddProperty(_TR("PDF Version:"), str); str = FormatPdfFileStructure(ctrl); layoutData->AddProperty(_TR("PDF Optimizations:"), str); int64 fileSize = file::GetSize(ctrl->FilePath()); if (-1 == fileSize && ctrl->AsFixed()) { size_t fileSizeT; if (ScopedMem<unsigned char>(ctrl->AsFixed()->GetEngine()->GetFileData(&fileSizeT))) fileSize = fileSizeT; } if (-1 != fileSize) { str = FormatFileSize((size_t)fileSize); layoutData->AddProperty(_TR("File Size:"), str); } // TODO: display page count per current layout for ebooks? if (!ctrl->AsEbook()) { str = str::Format(L"%d", ctrl->PageCount()); layoutData->AddProperty(_TR("Number of Pages:"), str); } if (ctrl->AsFixed()) { str = FormatPageSize(ctrl->AsFixed()->GetEngine(), ctrl->CurrentPageNo(), ctrl->AsFixed()->GetRotation()); if (IsUIRightToLeft() && IsVistaOrGreater()) { // ensure that the size remains ungarbled left-to-right // (note: XP doesn't know about \u202A...\u202C) WCHAR *tmp = str; str = str::Format(L"\u202A%s\u202C", tmp); free(tmp); } layoutData->AddProperty(_TR("Page Size:"), str); } str = FormatPermissions(ctrl); layoutData->AddProperty(_TR("Denied Permissions:"), str); #if defined(DEBUG) || defined(ENABLE_EXTENDED_PROPERTIES) if (extended) { // TODO: FontList extraction can take a while str = ctrl->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); } #else UNUSED(extended); #endif }