// Tencent is pleased to support the open source community by making UnLua available. // // Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. // // Licensed under the MIT License (the "License"); // you may not use this file except in compliance with the License. You may obtain a copy of the License at // // http://opensource.org/licenses/MIT // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and limitations under the License. #include "UnLuaAboutScreen.h" #include "Misc/EngineVersionComparison.h" #include "Widgets/SBoxPanel.h" #include "Widgets/SOverlay.h" #include "Widgets/SWindow.h" #include "Framework/Application/SlateApplication.h" #include "Widgets/Layout/SSpacer.h" #include "Widgets/Images/SImage.h" #include "Widgets/Text/STextBlock.h" #include "Widgets/Input/SEditableText.h" #include "Widgets/Input/SButton.h" #include "Widgets/Views/STableViewBase.h" #include "Widgets/Views/STableRow.h" #include "Widgets/Views/SListView.h" #include "Styling/CoreStyle.h" #include "EditorStyleSet.h" #include "UnLuaEditorFunctionLibrary.h" #include "UnLuaEditorStyle.h" #define LOCTEXT_NAMESPACE "UnLuaAboutScreen" void SUnLuaAboutScreen::Construct(const FArguments& InArgs) { #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4428) // universal-character-name encountered in source #endif AboutLines.Add(MakeShareable(new FLineDefinition(LOCTEXT("Copyright1", "https://github.com/Tencent/UnLua"), 8, FLinearColor(1.f, 1.f, 1.f), FMargin(0.f)))); AboutLines.Add(MakeShareable(new FLineDefinition(LOCTEXT("Copyright2", "Tencent is pleased to support the open source community by making UnLua available."), 8, FLinearColor(1.f, 1.f, 1.f), FMargin(0.0f, 8.0f)))); AboutLines.Add(MakeShareable(new FLineDefinition(LOCTEXT("Copyright3", "Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved."), 8, FLinearColor(1.f, 1.f, 1.f), FMargin(0.0f, 2.0f)))); #ifdef _MSC_VER #pragma warning(pop) #endif FText Version = FText::Format(LOCTEXT("VersionLabel", "Version: {0}"), FText::FromString(UUnLuaEditorFunctionLibrary::GetCurrentVersion())); ChildSlot [ SNew(SOverlay) + SOverlay::Slot() [ SNew(SVerticalBox) + SVerticalBox::Slot() .AutoHeight() [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .AutoWidth() .VAlign(VAlign_Top) .Padding(FMargin(10.f, 10.f, 0.f, 0.f)) [ SAssignNew(LogoButton, SButton) #if UE_VERSION_OLDER_THAN(5, 1, 0) .ButtonStyle(FEditorStyle::Get(), "NoBorder") #else .ButtonStyle(FAppStyle::Get(), "NoBorder") #endif .OnClicked(this, &SUnLuaAboutScreen::OnLogoButtonClicked) [ SNew(SImage).Image(FUnLuaEditorStyle::GetInstance()->GetBrush("UnLuaEditor.UnLuaLogo")) ] ] + SHorizontalBox::Slot() .AutoWidth() .VAlign(VAlign_Top) .Padding(FMargin(10.f, 10.f, 0.f, 0.f)) + SHorizontalBox::Slot() .FillWidth(1.f) .HAlign(HAlign_Right) .Padding(FMargin(0.f, 52.f, 7.f, 0.f)) [ SNew(SEditableText) .ColorAndOpacity(FLinearColor(0.7f, 0.7f, 0.7f)) .IsReadOnly(true) .Text(Version) ] ] + SVerticalBox::Slot() .Padding(FMargin(5.f, 5.f, 5.f, 5.f)) .VAlign(VAlign_Top) [ SNew(SListView>) .ListItemsSource(&AboutLines) .OnGenerateRow(this, &SUnLuaAboutScreen::MakeAboutTextItemWidget) .SelectionMode(ESelectionMode::None) ] + SVerticalBox::Slot() .AutoHeight() [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .HAlign(HAlign_Left) .Padding(FMargin(5.f, 0.f, 5.f, 5.f)) + SHorizontalBox::Slot() .AutoWidth() .HAlign(HAlign_Right) .VAlign(VAlign_Bottom) .Padding(FMargin(5.f, 0.f, 5.f, 5.f)) [ SNew(SButton) .HAlign(HAlign_Center) .VAlign(VAlign_Center) .Text(LOCTEXT("Close", "Close")) .ButtonColorAndOpacity(FLinearColor(0.6f, 0.6f, 0.6f)) .OnClicked(this, &SUnLuaAboutScreen::OnClose) ] ] ] ]; } TSharedRef SUnLuaAboutScreen::MakeAboutTextItemWidget(TSharedRef Item, const TSharedRef& OwnerTable) { if (Item->Text.IsEmpty()) { return SNew(STableRow< TSharedPtr >, OwnerTable) .Padding(6.0f) [ SNew(SSpacer) ]; } else { return SNew(STableRow< TSharedPtr >, OwnerTable) .Padding(Item->Margin) [ SNew(STextBlock) .ColorAndOpacity(Item->TextColor) .Font(FCoreStyle::GetDefaultFontStyle("Regular", Item->FontSize)) .Text(Item->Text) ]; } } FReply SUnLuaAboutScreen::OnLogoButtonClicked() { const TCHAR* URL = TEXT("cmd"); const TCHAR* Params = TEXT("/k start https://github.com/Tencent/UnLua"); FPlatformProcess::ExecProcess(URL, Params, nullptr, nullptr, nullptr); return FReply::Handled(); } FReply SUnLuaAboutScreen::OnClose() { TSharedRef ParentWindow = FSlateApplication::Get().FindWidgetWindow(AsShared()).ToSharedRef(); FSlateApplication::Get().RequestDestroyWindow(ParentWindow); return FReply::Handled(); } #undef LOCTEXT_NAMESPACE