diff --git a/Source/UnicodeBrowser/DataAsset_FontTags.cpp b/Source/UnicodeBrowser/DataAsset_FontTags.cpp index 04f9a09..1b36635 100644 --- a/Source/UnicodeBrowser/DataAsset_FontTags.cpp +++ b/Source/UnicodeBrowser/DataAsset_FontTags.cpp @@ -160,6 +160,9 @@ bool UDataAsset_FontTags::ImportFromJson(FString Filename) if (Glyphs.IsEmpty()) return false; + // flush current entries (e.g. on reimport there might be existing data) + Characters.Empty(); + for (TSharedPtr const& GlyphValue : Glyphs) { TSharedPtr const Glyph = GlyphValue->AsObject(); diff --git a/Source/UnicodeBrowser/ImportFactory/GlyphTagsImportFactory.cpp b/Source/UnicodeBrowser/ImportFactory/GlyphTagsImportFactory.cpp index 30b0010..80298b6 100644 --- a/Source/UnicodeBrowser/ImportFactory/GlyphTagsImportFactory.cpp +++ b/Source/UnicodeBrowser/ImportFactory/GlyphTagsImportFactory.cpp @@ -23,8 +23,13 @@ UGlyphTagsImportFactory::UGlyphTagsImportFactory(FObjectInitializer const& Objec bool UGlyphTagsImportFactory::CanReimport(UObject* Obj, TArray& OutFilenames) { - UDataAsset_FontTags const* Object = Cast(Obj); - return IsValid(Object) && FactoryCanImport(Object->SourceFile); + if(UDataAsset_FontTags const* Object = Cast(Obj)) + { + OutFilenames.Add(Object->SourceFile); + return IsValid(Object) && FactoryCanImport(Object->SourceFile); + } + + return false; }; void UGlyphTagsImportFactory::SetReimportPaths(UObject* Obj, TArray const& NewReimportPaths) @@ -38,7 +43,8 @@ void UGlyphTagsImportFactory::SetReimportPaths(UObject* Obj, TArray con bool UGlyphTagsImportFactory::FactoryCanImport(FString const& Filename) { - FString JsonString; + FString JsonString = ""; + if (!FFileHelper::LoadFileToString(JsonString, *Filename)) return false; @@ -46,7 +52,7 @@ bool UGlyphTagsImportFactory::FactoryCanImport(FString const& Filename) auto const Reader = TJsonReaderFactory<>::Create(JsonString); FJsonSerializer::Deserialize(Reader, JsonObject); - return JsonObject->HasField(TEXT("format")) && JsonObject->GetStringField(TEXT("format")) == "UnicodeBrowserGlyphTags_V1"; + return JsonObject->HasTypedField(TEXT("format")) && JsonObject->GetStringField(TEXT("format")) == TEXT("UnicodeBrowserGlyphTags_V1"); } UObject* UGlyphTagsImportFactory::ImportObject(UClass* InClass, UObject* InOuter, FName const InName, EObjectFlags const InFlags, FString const& Filename, TCHAR const* Parms, bool& OutCanceled) diff --git a/Source/UnicodeBrowser/UnicodeBrowser.cpp b/Source/UnicodeBrowser/UnicodeBrowser.cpp index b0a8809..9bb4e01 100644 --- a/Source/UnicodeBrowser/UnicodeBrowser.cpp +++ b/Source/UnicodeBrowser/UnicodeBrowser.cpp @@ -58,15 +58,7 @@ TSharedRef FUnicodeBrowserModule::OnSpawnPluginTab(FSpawnTabArgs const return SNew(SDockTab) .TabRole(ETabRole::NomadTab) [ - SNew(SVerticalBox) - + SVerticalBox::Slot() - .FillHeight(1.0f) - .FillContentHeight(1.0f) - .HAlign(HAlign_Fill) - .VAlign(VAlign_Fill) - [ - SNew(SUnicodeBrowserWidget) - ] + SNew(SUnicodeBrowserWidget) ]; } diff --git a/Source/UnicodeBrowser/UnicodeBrowserRow.h b/Source/UnicodeBrowser/UnicodeBrowserRow.h index c17759d..0c324fa 100644 --- a/Source/UnicodeBrowser/UnicodeBrowserRow.h +++ b/Source/UnicodeBrowser/UnicodeBrowserRow.h @@ -3,6 +3,7 @@ #include "Fonts/UnicodeBlockRange.h" #include "Framework/Application/SlateApplication.h" +#include "Internationalization/TextChar.h" class FUnicodeBrowserRow : public TSharedFromThis { @@ -12,11 +13,15 @@ class FUnicodeBrowserRow : public TSharedFromThis BlockRange(BlockRangeIn), FontInfo(FontInfoIn) { - FUnicodeChar::CodepointToString(Codepoint, Character); + if(Codepoint != -1) + { + bHasValidCharacter = FTextChar::ConvertCodepointToString(Codepoint, Character); + } } FString Character; - int32 Codepoint = 0; + bool bHasValidCharacter = false; + int32 Codepoint = -1; TOptional BlockRange; bool bFilteredByTag = false; diff --git a/Source/UnicodeBrowser/UnicodeBrowserStatic.cpp b/Source/UnicodeBrowser/UnicodeBrowserStatic.cpp index d960fdb..55d71ce 100644 --- a/Source/UnicodeBrowser/UnicodeBrowserStatic.cpp +++ b/Source/UnicodeBrowser/UnicodeBrowserStatic.cpp @@ -11,7 +11,7 @@ TOptional UnicodeBrowser::GetUnicodeBlockRangeFromChar(int32 { for (auto const& BlockRange : FUnicodeBlockRange::GetUnicodeBlockRanges()) { - if (BlockRange.Range.Contains(CharCode)) + if (BlockRange.GetRange().Contains(CharCode)) { return BlockRange.Index; } @@ -25,12 +25,12 @@ TArrayView UnicodeBrowser::GetUnicodeBlockRanges() if (Ranges.IsEmpty()) { Ranges = FUnicodeBlockRange::GetUnicodeBlockRanges(); - Ranges.StableSort( + /*Ranges.Sort( [](FUnicodeBlockRange const& A, FUnicodeBlockRange const& B) { - return A.DisplayName.CompareTo(B.DisplayName) < 0; + return A.GetDisplayName().CompareTo(B.GetDisplayName()) < 0; } - ); + );*/ } return Ranges; } diff --git a/Source/UnicodeBrowser/UnicodeBrowserStatic.h b/Source/UnicodeBrowser/UnicodeBrowserStatic.h index a76f208..ea1ec0f 100644 --- a/Source/UnicodeBrowser/UnicodeBrowserStatic.h +++ b/Source/UnicodeBrowser/UnicodeBrowserStatic.h @@ -8,8 +8,8 @@ namespace UnicodeBrowser TCHAR constexpr InvalidSubChar = TEXT('\uFFFD'); TOptional GetUnicodeBlockRangeFromChar(int32 const CharCode); - static TArrayView Ranges; // all known Unicode ranges - TArrayView GetUnicodeBlockRanges(); + static TConstArrayView Ranges; // all known Unicode ranges + TConstArrayView GetUnicodeBlockRanges(); static FString GetUnicodeCharacterName(int32 CharCode); diff --git a/Source/UnicodeBrowser/UnicodeBrowserWidget.cpp b/Source/UnicodeBrowser/UnicodeBrowserWidget.cpp index e85e936..6ec13b9 100644 --- a/Source/UnicodeBrowser/UnicodeBrowserWidget.cpp +++ b/Source/UnicodeBrowser/UnicodeBrowserWidget.cpp @@ -571,7 +571,7 @@ void SUnicodeBrowserWidget::PopulateSupportedCharacters() RowsRaw.Add(Range.Index); TArray>& RangeArray = RowsRaw.FindChecked(Range.Index); - for (int CharCode = Range.Range.GetLowerBound().GetValue(); CharCode <= Range.Range.GetUpperBound().GetValue(); ++CharCode) + for (int CharCode = Range.GetRange().GetLowerBound().GetValue(); CharCode <= Range.GetRange().GetUpperBound().GetValue(); ++CharCode) { auto Row = MakeShared(CharCode, Range.Index, &CurrentFont); diff --git a/Source/UnicodeBrowser/Widgets/SUnicodeBlockRangeSelector.cpp b/Source/UnicodeBrowser/Widgets/SUnicodeBlockRangeSelector.cpp index d77b16e..dedeb2f 100644 --- a/Source/UnicodeBrowser/Widgets/SUnicodeBlockRangeSelector.cpp +++ b/Source/UnicodeBrowser/Widgets/SUnicodeBlockRangeSelector.cpp @@ -39,17 +39,17 @@ void SUnicodeBlockRangeSelector::Construct(FArguments const& InArgs) return FText::GetEmpty(); int32 const Num = UnicodeBrowser.Pin().Get()->Rows.Contains(Range.Index) ? UnicodeBrowser.Pin().Get()->Rows.FindChecked(Range.Index).Num() : 0; - return FText::FromString(FString::Printf(TEXT("%s (%d)"), *Range.DisplayName.ToString(), Num)); + return FText::FromString(FString::Printf(TEXT("%s (%d)"), *Range.GetDisplayName().ToString(), Num)); } ) .ToolTipText( FText::FromString( FString::Printf( TEXT("%s: Range U+%-06.04X Codes U+%-06.04X - U+%-06.04X"), - *Range.DisplayName.ToString(), + *Range.GetDisplayName().ToString(), Range.Index, - Range.Range.GetLowerBoundValue(), - Range.Range.GetUpperBoundValue() + Range.GetRange().GetLowerBoundValue(), + Range.GetRange().GetUpperBoundValue() ) ) ) @@ -106,7 +106,7 @@ void SUnicodeBlockRangeSelector::SetRanges(TArray const& Ran continue; } - if (CheckboxIndices[Range.Index], RangesToSet.Contains(Range.Index)) + if (RangesToSet.Contains(Range.Index)) { CheckBoxList->SetItemChecked(CheckboxIndices[Range.Index], ECheckBoxState::Checked); } diff --git a/Source/UnicodeBrowser/Widgets/SUnicodeBrowserSidePanel.cpp b/Source/UnicodeBrowser/Widgets/SUnicodeBrowserSidePanel.cpp index e3b1e12..1fc0306 100644 --- a/Source/UnicodeBrowser/Widgets/SUnicodeBrowserSidePanel.cpp +++ b/Source/UnicodeBrowser/Widgets/SUnicodeBrowserSidePanel.cpp @@ -87,7 +87,8 @@ void SUnicodeBrowserSidePanel::Construct(FArguments const& InArgs) ] .BodyContent() [ - SAssignNew(CurrentCharacterDetails, SUnicodeCharacterInfo).Row(UnicodeBrowser.Pin().Get()->CurrentRow) + SAssignNew(CurrentCharacterDetails, SUnicodeCharacterInfo) + .Row(UnicodeBrowser.Pin().Get()->CurrentRow) ] ] + SVerticalBox::Slot() diff --git a/Source/UnicodeBrowser/Widgets/SUnicodeCharacterInfo.cpp b/Source/UnicodeBrowser/Widgets/SUnicodeCharacterInfo.cpp index 84a7327..9466551 100644 --- a/Source/UnicodeBrowser/Widgets/SUnicodeCharacterInfo.cpp +++ b/Source/UnicodeBrowser/Widgets/SUnicodeCharacterInfo.cpp @@ -13,12 +13,16 @@ void SUnicodeCharacterInfo::Construct(FArguments const& InArgs) { SInvalidationPanel::Construct(SInvalidationPanel::FArguments()); SetCanCache(true); - SetRow(InArgs._Row); + + if(InArgs._Row.IsValid()) + { + SetRow(InArgs._Row); + } } void SUnicodeCharacterInfo::SetRow(TSharedPtr InRow) { - if(!InRow.IsValid()) + if(!InRow.IsValid() || !InRow->bHasValidCharacter) return; FText TagsText = FText::GetEmpty(); @@ -29,9 +33,11 @@ void SUnicodeCharacterInfo::SetRow(TSharedPtr InRow) } FString BlockRangeName = ""; - if(FUnicodeBlockRange const *Range = UnicodeBrowser::GetUnicodeBlockRanges().FindByPredicate([Needle = InRow->BlockRange.Get(EUnicodeBlockRange::ControlCharacter)](FUnicodeBlockRange const &Range){ return Range.Index == Needle; })) - { - BlockRangeName = *Range->DisplayName.ToString(); + if(InRow->BlockRange){ + if(FUnicodeBlockRange const *Range = UnicodeBrowser::GetUnicodeBlockRanges().FindByPredicate([Needle = InRow->BlockRange.Get(EUnicodeBlockRange::ControlCharacter)](FUnicodeBlockRange const &Range){ return Range.Index == Needle; })) + { + BlockRangeName = *Range->GetDisplayName().ToString(); + } } SetContent(