int main(int argc, char* argv[]) { char a; int fd; char *filename = NULL; char *IconDir = NULL; struct stat statbuf; const char *Err; StrBuf *MimeBuf; long MimeLen; char *MimeStr; int by_extension = 0; const char *GuessedMimeType; const char *GuessedMimeIcon; char MimeTypeStr[SIZ]; setvbuf(stdout, NULL, _IONBF, 0); while ((a = getopt(argc, argv, "xf:i:")) != EOF) { switch (a) { case 'x': by_extension = 1; break; case 'f': filename = optarg; break; case 'i': IconDir = optarg; break; } } StartLibCitadel(8); if (IconDir != NULL) LoadIconDir(IconDir); if (filename == NULL) { ShutDownLibCitadel(); printf("Filename requried! -f\n"); return 1; } if (by_extension) { GuessedMimeType = GuessMimeByFilename(filename, strlen(filename)); printf("Mimetype: %s\n", GuessedMimeType); if (IconDir != NULL) { strcpy(MimeTypeStr, GuessedMimeType); GuessedMimeIcon = GetIconFilename(MimeTypeStr, strlen(MimeTypeStr)); if (GuessedMimeIcon != NULL) printf("Associated Icon [%s]\n", GuessedMimeIcon); else printf("no icon associated.\n"); } ShutDownLibCitadel(); return 0; } fd = open(filename, 0); if (fd < 0) { printf("Error opening file [%s] %d [%s]\n", filename, errno, strerror(errno)); ShutDownLibCitadel(); return 1; } if (fstat(fd, &statbuf) == -1) { printf("Error stating file [%s] %d [%s]\n", filename, errno, strerror(errno)); ShutDownLibCitadel(); return 1; } MimeBuf = NewStrBufPlain(NULL, statbuf.st_size + 1); if (StrBufReadBLOB(MimeBuf, &fd, 1, statbuf.st_size, &Err) < 0) { printf("Error reading file [%s] %d [%s] [%s]\n", filename, errno, strerror(errno), Err); FreeStrBuf(&MimeBuf); ShutDownLibCitadel(); return 1; } MimeLen = StrLength(MimeBuf); MimeStr = SmashStrBuf(&MimeBuf); GuessedMimeType = GuessMimeType(MimeStr, MimeLen); printf("Mimetype: %s\n", GuessedMimeType); if (IconDir != NULL) { strcpy(MimeTypeStr, GuessedMimeType); GuessedMimeIcon = GetIconFilename(MimeTypeStr, strlen(MimeTypeStr)); if (GuessedMimeIcon != NULL) printf("Associated Icon [%s]\n", GuessedMimeIcon); else printf("no icon associated.\n"); } free(MimeStr); ShutDownLibCitadel(); return 0; }
void FWindowsTargetSettingsDetails::CustomizeDetails( IDetailLayoutBuilder& DetailBuilder ) { // Setup the supported/targeted RHI property view TargetShaderFormatsDetails = MakeShareable(new FTargetShaderFormatsPropertyDetails(&DetailBuilder)); TargetShaderFormatsDetails->CreateTargetShaderFormatsPropertyView(); TSharedRef<IPropertyHandle> MinOSProperty = DetailBuilder.GetProperty("MinimumOSVersion"); IDetailCategoryBuilder& OSInfoCategory = DetailBuilder.EditCategory(TEXT("OS Info")); // Setup edit condition and tool tip of Min OS property. Determined by whether the engine is installed or not. bool bIsMinOSSelectionAvailable = FApp::IsEngineInstalled() == false; IDetailPropertyRow& MinOSRow = OSInfoCategory.AddProperty(MinOSProperty); MinOSRow.IsEnabled(bIsMinOSSelectionAvailable); MinOSRow.ToolTip(bIsMinOSSelectionAvailable ? MinOSProperty->GetToolTipText() : WindowsTargetSettingsDetailsConstants::DisabledTip); // Next add the splash image customization const FText EditorSplashDesc(LOCTEXT("EditorSplashLabel", "Editor Splash")); IDetailCategoryBuilder& SplashCategoryBuilder = DetailBuilder.EditCategory(TEXT("Splash")); FDetailWidgetRow& EditorSplashWidgetRow = SplashCategoryBuilder.AddCustomRow(EditorSplashDesc); const FString EditorSplash_TargetImagePath = GetSplashFilename(EImageScope::GameOverride, true); const FString EditorSplash_DefaultImagePath = GetSplashFilename(EImageScope::Engine, true); EditorSplashWidgetRow .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(EditorSplashDesc) .Font(DetailBuilder.GetDetailFont()) ] ] .ValueContent() .MaxDesiredWidth(500.0f) .MinDesiredWidth(100.0f) [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .FillWidth(1.0f) .VAlign(VAlign_Center) [ SNew(SExternalImageReference, EditorSplash_DefaultImagePath, EditorSplash_TargetImagePath) .FileDescription(EditorSplashDesc) .OnGetPickerPath(FOnGetPickerPath::CreateSP(this, &FWindowsTargetSettingsDetails::GetPickerPath)) .OnPostExternalImageCopy(FOnPostExternalImageCopy::CreateSP(this, &FWindowsTargetSettingsDetails::HandlePostExternalIconCopy)) ] ]; const FText GameSplashDesc(LOCTEXT("GameSplashLabel", "Game Splash")); FDetailWidgetRow& GameSplashWidgetRow = SplashCategoryBuilder.AddCustomRow(GameSplashDesc); const FString GameSplash_TargetImagePath = GetSplashFilename(EImageScope::GameOverride, false); const FString GameSplash_DefaultImagePath = GetSplashFilename(EImageScope::Engine, false); GameSplashWidgetRow .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(GameSplashDesc) .Font(DetailBuilder.GetDetailFont()) ] ] .ValueContent() .MaxDesiredWidth(500.0f) .MinDesiredWidth(100.0f) [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .FillWidth(1.0f) .VAlign(VAlign_Center) [ SNew(SExternalImageReference, GameSplash_DefaultImagePath, GameSplash_TargetImagePath) .FileDescription(GameSplashDesc) .OnGetPickerPath(FOnGetPickerPath::CreateSP(this, &FWindowsTargetSettingsDetails::GetPickerPath)) .OnPostExternalImageCopy(FOnPostExternalImageCopy::CreateSP(this, &FWindowsTargetSettingsDetails::HandlePostExternalIconCopy)) ] ]; IDetailCategoryBuilder& IconsCategoryBuilder = DetailBuilder.EditCategory(TEXT("Icon")); FDetailWidgetRow& GameIconWidgetRow = IconsCategoryBuilder.AddCustomRow(LOCTEXT("GameIconLabel", "Game Icon")); GameIconWidgetRow .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(LOCTEXT("GameIconLabel", "Game Icon")) .Font(DetailBuilder.GetDetailFont()) ] ] .ValueContent() .MaxDesiredWidth(500.0f) .MinDesiredWidth(100.0f) [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .FillWidth(1.0f) .VAlign(VAlign_Center) [ SNew(SExternalImageReference, GetIconFilename(EImageScope::Engine), GetIconFilename(EImageScope::GameOverride)) .FileDescription(GameSplashDesc) .OnPreExternalImageCopy(FOnPreExternalImageCopy::CreateSP(this, &FWindowsTargetSettingsDetails::HandlePreExternalIconCopy)) .OnGetPickerPath(FOnGetPickerPath::CreateSP(this, &FWindowsTargetSettingsDetails::GetPickerPath)) .OnPostExternalImageCopy(FOnPostExternalImageCopy::CreateSP(this, &FWindowsTargetSettingsDetails::HandlePostExternalIconCopy)) ] ]; }