From c8f22f0d7d358022e42b6c087a854831012d975c Mon Sep 17 00:00:00 2001 From: Jonathan Wendt <wendt@vr.rwth-aachen.de> Date: Tue, 21 May 2019 13:15:10 +0200 Subject: [PATCH] remove unnecessary LikertScale stuff which is in another Plugin --- .../Content/MenuUmgBP/Button.uasset | Bin 17524 -> 0 bytes .../Content/MenuUmgBP/Plane.uasset | Bin 17001 -> 0 bytes .../Content/MenuUmgBP/Text.uasset | Bin 32784 -> 0 bytes .../Content/MenuUmgBP/TextButton.uasset | Bin 17427 -> 0 bytes .../LikertPlugin/LikertPlugin.uplugin | 28 -- .../Source/LikertPlugin/LikertPlugin.Build.cs | 60 --- .../LikertPlugin/Private/LayoutComponent.cpp | 140 ------ .../LikertPlugin/Private/LikertPlugin.cpp | 20 - .../LikertPlugin/Private/LikertScale.cpp | 422 ------------------ .../Private/LikertScaleSequence.cpp | 75 ---- .../LikertPlugin/Private/MenuUserWidget.cpp | 24 - .../Private/MultilineTextLayouter.cpp | 51 --- .../Private/MultipleLikertScale.cpp | 75 ---- .../Private/TextWidgetComponent.cpp | 70 --- .../Private/WidgetObjectManager.cpp | 52 --- .../LikertPlugin/Public/LayoutComponent.h | 52 --- .../Source/LikertPlugin/Public/LikertPlugin.h | 15 - .../Source/LikertPlugin/Public/LikertScale.h | 142 ------ .../LikertPlugin/Public/LikertScaleSequence.h | 41 -- .../LikertPlugin/Public/MenuUserWidget.h | 41 -- .../Public/MultilineTextLayouter.h | 27 -- .../LikertPlugin/Public/MultipleLikertScale.h | 41 -- .../LikertPlugin/Public/TextWidgetComponent.h | 35 -- .../LikertPlugin/Public/WidgetObjectManager.h | 24 - WidgetInteraction/Resources/Icon128.png | Bin 12699 -> 0 bytes 25 files changed, 1435 deletions(-) delete mode 100644 LikertPlugin/LikertPlugin/Content/MenuUmgBP/Button.uasset delete mode 100644 LikertPlugin/LikertPlugin/Content/MenuUmgBP/Plane.uasset delete mode 100644 LikertPlugin/LikertPlugin/Content/MenuUmgBP/Text.uasset delete mode 100644 LikertPlugin/LikertPlugin/Content/MenuUmgBP/TextButton.uasset delete mode 100644 LikertPlugin/LikertPlugin/LikertPlugin.uplugin delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/LikertPlugin.Build.cs delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LayoutComponent.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertPlugin.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScale.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScaleSequence.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MenuUserWidget.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultilineTextLayouter.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultipleLikertScale.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/TextWidgetComponent.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/WidgetObjectManager.cpp delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LayoutComponent.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertPlugin.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScale.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScaleSequence.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MenuUserWidget.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultilineTextLayouter.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultipleLikertScale.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/TextWidgetComponent.h delete mode 100644 LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/WidgetObjectManager.h delete mode 100644 WidgetInteraction/Resources/Icon128.png diff --git a/LikertPlugin/LikertPlugin/Content/MenuUmgBP/Button.uasset b/LikertPlugin/LikertPlugin/Content/MenuUmgBP/Button.uasset deleted file mode 100644 index 9fc933577ce193678c8f5c7a41123bfc5af13dde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17524 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 diff --git a/LikertPlugin/LikertPlugin/Content/MenuUmgBP/Plane.uasset b/LikertPlugin/LikertPlugin/Content/MenuUmgBP/Plane.uasset deleted file mode 100644 index 26aa43969f0b38569e12a6c0c975580e6a962b33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17001 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 H9Wns`z^{h6 diff --git a/LikertPlugin/LikertPlugin/Content/MenuUmgBP/Text.uasset b/LikertPlugin/LikertPlugin/Content/MenuUmgBP/Text.uasset deleted file mode 100644 index 2e9bd41f4b5fd881aecc7104d31fbebf62095600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32784 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Ɏ<u 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 diff --git a/LikertPlugin/LikertPlugin/Content/MenuUmgBP/TextButton.uasset b/LikertPlugin/LikertPlugin/Content/MenuUmgBP/TextButton.uasset deleted file mode 100644 index 7634509c315ca7744fdf56e810d9bbf01f9fe684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17427 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 diff --git a/LikertPlugin/LikertPlugin/LikertPlugin.uplugin b/LikertPlugin/LikertPlugin/LikertPlugin.uplugin deleted file mode 100644 index da04a15..0000000 --- a/LikertPlugin/LikertPlugin/LikertPlugin.uplugin +++ /dev/null @@ -1,28 +0,0 @@ -{ - "FileVersion": 3, - "Version": 1, - "VersionName": "1.0", - "FriendlyName": "LikertPlugin", - "Description": "This Plugin allows for easy creation of Likert Scales", - "Category": "Other", - "CreatedBy": "Me", - "CreatedByURL": "", - "DocsURL": "", - "MarketplaceURL": "", - "SupportURL": "", - "EngineVersion": "4.21.0", - "CanContainContent": true, - "Installed": true, - "Modules": [ - { - "Name": "LikertPlugin", - "Type": "Runtime", - "LoadingPhase": "Default", - "WhitelistPlatforms": [ - "Win32", - "Win64", - "Linux" - ] - } - ] -} \ No newline at end of file diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/LikertPlugin.Build.cs b/LikertPlugin/LikertPlugin/Source/LikertPlugin/LikertPlugin.Build.cs deleted file mode 100644 index 56e4ab0..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/LikertPlugin.Build.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. - - -using UnrealBuildTool; - -public class LikertPlugin : ModuleRules -{ - public LikertPlugin(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - // ... add other public dependencies that you statically link with here ... - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "CoreUObject", - "Engine", - "Slate", - "SlateCore", - "Json", - "UMG" - // ... add private dependencies that you statically link with here ... - } - ); - if (Target.bBuildEditor) - { - PrivateDependencyModuleNames.Add("UnrealEd"); - } - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LayoutComponent.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LayoutComponent.cpp deleted file mode 100644 index a8ddb2d..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LayoutComponent.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "LayoutComponent.h" -#include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h" -#include "MultilineTextLayouter.h" - - -ULayoutComponent::ULayoutComponent() -{ - PrimaryComponentTick.bCanEverTick = false; -} - -void ULayoutComponent::Update() -{ - GetChildrenComponents(false, children_); - - prioritize(); - - float size_weight_sum = 0.0f; - for(auto i = 0; i < children_.Num(); ++i) - { - if (dynamic_cast<ULayoutComponent*>(children_[i])) - size_weight_sum += dynamic_cast<ULayoutComponent*>(children_[i])->size_weight_; - else - size_weight_sum += 1.0f; - } - - auto size_factor_ = size_weight_sum / children_.Num(); - float child_size_sum = 0.0f; - - for (auto i = 0; i < children_.Num(); ++i) - { - FTransform transform; - auto child_menu_cnt = children_.Num(); - - float size_weight = 1.0f; - if(dynamic_cast<ULayoutComponent*>(children_[i])) - size_weight = dynamic_cast<ULayoutComponent*>(children_[i])->size_weight_; - - auto child_scale = FVector2D(1.0f, size_weight *(1.0f - submenu_offset_factor_ * (child_menu_cnt - 1)) / (child_menu_cnt * size_factor_)); - auto first_child_loc = (0.5f - 0.5f * (child_scale.Y)); - auto child_loc = first_child_loc - child_size_sum; - child_size_sum += child_scale.Y + submenu_offset_factor_; - - if (alignment_ == VERTICAL) - { - transform.SetLocation(FVector(0.1f, 0.0f, res_.Y * child_loc)); - transform.SetScale3D(FVector(1.0f, child_scale.X, child_scale.Y)); - } - else if (alignment_ == HORIZONTAL) - { - transform.SetLocation(FVector(0.1f, res_.X * child_loc, 0.0f)); - transform.SetScale3D(FVector(1.0f, child_scale.Y, child_scale.X)); - } - auto child = children_[i]; - if(dynamic_cast<UTextWidgetComponent *>(child) != nullptr) - dynamic_cast<UTextWidgetComponent *>(child)->SetSize(transform, GetComponentScale()); - else - child->SetRelativeTransform(transform); - - if (dynamic_cast<ULayoutComponent*>(children_[i])) - dynamic_cast<ULayoutComponent*>(children_[i])->Update(); - } -} - -void ULayoutComponent::prioritize() -{ - for (auto i = 0; i < children_.Num() - 1; ++i) - { - auto layout = dynamic_cast<ULayoutComponent*>(children_[i]); - if (layout != nullptr) - { - if (layout->GetPriority() == 2) - for (auto j = i; j > 0; --j) - children_.Swap(j, j - 1); - - if (layout->GetPriority() == 0) - for (auto j = i; j < children_.Num() - 1; ++j) - children_.Swap(j, j + 1); - } - } -} - - -void ULayoutComponent::Init(FVector2D res, Alignment alignment, FVector rel_loc) -{ - res_ = res; - alignment_ = alignment; - SetRelativeLocation(rel_loc); -} - -UTextWidgetComponent * ULayoutComponent::CreateWidgetChild(FName name, WidgetObjectManager::AssetInfo & asset, int priority) -{ - auto widget = NewObject<UTextWidgetComponent>(GetOwner(), UTextWidgetComponent::StaticClass()); - widget->RegisterComponent(); - auto attachment_rules = FAttachmentTransformRules(EAttachmentRule::KeepRelative, false); - widget->AttachToComponent(this, attachment_rules); - - widget->SetWidgetSpace(EWidgetSpace::World); - widget->SetWidgetClass(asset.uclass); - widget->SetDrawSize(FVector2D(asset.res_x, asset.res_y)); - - widget->SetRelativeLocation(FVector(0.0f)); - widget->SetRelativeScale3D(FVector(1.0f)); - widget->SetPriority(priority); - widget->SetChangeRelSize(asset.change_rel_size); - - widget->Init(); - return widget; -} - -ULayoutComponent * ULayoutComponent::CreateLayoutChild(Alignment alignment, UClass * uclass) -{ - auto layout = NewObject<ULayoutComponent>(GetOwner(), uclass); - layout->RegisterComponent(); - auto attachment_rules = FAttachmentTransformRules(EAttachmentRule::KeepRelative, false); - layout->AttachToComponent(this, attachment_rules); - layout->Init(FVector2D(1280.0, 720.0), alignment, FVector(1.0f, 0.0f, 0.0f)); - return layout; -} - -void ULayoutComponent::SetPriority(uint8 priority) -{ - priority_ = priority; -} - -uint8 ULayoutComponent::GetPriority() -{ - return priority_; -} - -void ULayoutComponent::DestroyChild(int index) -{ - children_[index]->DestroyComponent(); -} - -void ULayoutComponent::SetSizeWeight(float size_weight) -{ - size_weight_ = size_weight; -} \ No newline at end of file diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertPlugin.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertPlugin.cpp deleted file mode 100644 index 9aba878..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertPlugin.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. - -#include "LikertPlugin.h" - -#define LOCTEXT_NAMESPACE "FLikertPluginModule" - -void FLikertPluginModule::StartupModule() -{ - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module -} - -void FLikertPluginModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FLikertPluginModule, LikertPlugin) \ No newline at end of file diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScale.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScale.cpp deleted file mode 100644 index db094d8..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScale.cpp +++ /dev/null @@ -1,422 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "LikertScale.h" -#include "Runtime/Core/Public/Misc/FileHelper.h" -#include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h" - - -// Sets default values -ALikertScale::ALikertScale() -{ - PrimaryActorTick.bCanEverTick = true; - - background_ = CreateDefaultSubobject<UTextWidgetComponent>("Background"); - background_->SetWidgetSpace(EWidgetSpace::World); - background_->SetWidgetClass(widget_object_manager_.plane_info.uclass); - background_->SetDrawSize(FVector2D(widget_object_manager_.plane_info.res_x, widget_object_manager_.plane_info.res_y)); - background_->SetupAttachment(RootComponent); - background_->SetRelativeScale3D(FVector(1.0f, 1.0f, 0.5f)); - RootComponent = background_; - - json_object_ = MakeShareable(new FJsonObject); - json_object_->SetNumberField("Number of Answer Options", number_of_answer_options_); - json_object_->SetStringField("Question Text", question_text_); - for (auto i = 0; i < answer_text_.Num(); ++i) - json_object_->SetStringField(FString("Answer Text ").Append(*FString::FromInt(0)), answer_text_[0]); - json_object_->SetBoolField("Has Pre and Post Text", has_pre_post_text_); - json_object_->SetStringField("Pre Text", pre_text_); - json_object_->SetStringField("Post Text", post_text_); - json_object_->SetNumberField("Pre and Post Text Size", pre_post_text_size_); - json_object_->SetNumberField("Answer Text Size", answer_text_size_); - json_object_->SetNumberField("Question Size", question_size_); - json_object_->SetNumberField("Question Layer Size Weight", question_layer_size_weight_); - json_object_->SetNumberField("Answer Layer Size Weight", answer_layer_size_weight_); - json_object_->SetNumberField("Button Layer Size Weight", button_layer_size_weight_); - json_object_->SetNumberField("Pre and Post Size Weight", pre_post_size_weight_); - json_object_->SetNumberField("No Answer Allowed", no_answer_allowed_); - - - LoadState(); - -} - -void ALikertScale::BeginPlay() -{ - LoadState(); - - Super::BeginPlay(); - layout_generell_ = CreateLayoutChild(Alignment::VERTICAL, background_, ULayoutComponent::StaticClass()); - layout_generell_->SetRelativeScale3D(FVector(1.0f, 0.95f, 0.95f)); - question_ = layout_generell_->CreateLayoutChild(Alignment::VERTICAL, UMultilineTextLayouter::StaticClass()); - layout_text_ = layout_generell_->CreateLayoutChild(Alignment::HORIZONTAL, ULayoutComponent::StaticClass()); - layout_buttons_ = layout_generell_->CreateLayoutChild(Alignment::HORIZONTAL, ULayoutComponent::StaticClass()); - layout_submit_ = layout_generell_->CreateLayoutChild(Alignment::HORIZONTAL, ULayoutComponent::StaticClass()); - layout_submit_child_ = layout_submit_->CreateLayoutChild(Alignment::VERTICAL, ULayoutComponent::StaticClass()); - submit_button_ = layout_submit_child_->CreateWidgetChild("submit_button", widget_object_manager_.text_button_info); - submit_button_->SetText(FString("No Answer")); - - OnNumberOfAnswerOptionsChanged(); - OnPrePostToggle(); - - Update(); - - dynamic_cast<UMultilineTextLayouter*>(question_)->SetText(question_text_, widget_object_manager_); - dynamic_cast<UMultilineTextLayouter*>(question_)->SetFontSize(question_size_); - - layout_buttons_->SetSizeWeight(button_layer_size_weight_); - Update(); - has_pre_post_text_ = !has_pre_post_text_; - OnPrePostToggle(); - has_pre_post_text_ = !has_pre_post_text_; - OnPrePostToggle(); - Update(); - -} - -ULayoutComponent * ALikertScale::CreateLayoutChild(Alignment alignment, USceneComponent * parent, UClass * uclass) -{ - auto layout = NewObject<ULayoutComponent>(this, uclass); - layout->RegisterComponent(); - auto attachment_rules = FAttachmentTransformRules(EAttachmentRule::KeepRelative, false); - layout->AttachToComponent(parent, attachment_rules); - layout->Init(background_->GetDrawSize(), alignment, FVector(1.0f, 0.0f, 0.0f)); - return layout; -} - -#if WITH_EDITOR -void ALikertScale::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - auto prop = PropertyChangedEvent.Property; - if (prop == nullptr) - return; - - auto world = GetWorld(); - auto prop_name = FName(*prop->GetName()); - if(prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, number_of_answer_options_ ) ) - { - json_object_->SetNumberField("Number of Answer Options", number_of_answer_options_); - if (world->IsPlayInEditor()) - OnNumberOfAnswerOptionsChanged(); - - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, question_text_) ) - { - json_object_->SetStringField("Question Text", question_text_); - if (world->IsPlayInEditor()) - dynamic_cast<UMultilineTextLayouter*>(question_)->SetText(question_text_, widget_object_manager_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, answer_text_) ) - { - for(auto i = 0; i < answer_text_.Num(); ++i) - { - if (world->IsPlayInEditor()) - texts_[i]->SetText(answer_text_[i]); - json_object_->SetStringField(FString("Answer Text ").Append(*FString::FromInt(i)), answer_text_[i]); - } - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, has_pre_post_text_) ) - { - if (world->IsPlayInEditor()) - OnPrePostToggle(); - json_object_->SetBoolField("Has Pre and Post Text", has_pre_post_text_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, pre_text_) && has_pre_post_text_ == true ) - { - if (world->IsPlayInEditor()) - dynamic_cast<UMultilineTextLayouter*>( pre_widget_ )->SetText( pre_text_, widget_object_manager_ ); - json_object_->SetStringField("Pre Text", pre_text_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, post_text_) && has_pre_post_text_ == true ) - { - if (world->IsPlayInEditor()) - dynamic_cast<UMultilineTextLayouter*>( post_widget_)->SetText(post_text_, widget_object_manager_); - json_object_->SetStringField("Post Text", post_text_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, pre_post_text_size_) && has_pre_post_text_ == true ) - { - if (world->IsPlayInEditor()) - { - dynamic_cast<UMultilineTextLayouter*>( post_widget_ )->SetFontSize(pre_post_text_size_); - dynamic_cast<UMultilineTextLayouter*>( pre_widget_ )->SetFontSize(pre_post_text_size_); - } - json_object_->SetNumberField("Pre and Post Text Size", pre_post_text_size_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, answer_text_size_) ) - { - if (world->IsPlayInEditor()) - for (auto i = 0; i < answer_text_.Num(); ++i) - texts_[i]->SetFontSize(answer_text_size_); - json_object_->SetNumberField("Answer Text Size", answer_text_size_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, question_size_) ) - { - if (world->IsPlayInEditor()) - dynamic_cast<UMultilineTextLayouter*>(question_)->SetFontSize(question_size_); - json_object_->SetNumberField("Question Size", question_size_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, question_layer_size_weight_) ) - { - if (world->IsPlayInEditor()) - question_->SetSizeWeight(question_layer_size_weight_); - json_object_->SetNumberField("Question Layer Size Weight", question_layer_size_weight_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, answer_layer_size_weight_)) - { - if (world->IsPlayInEditor()) - layout_text_->SetSizeWeight(answer_layer_size_weight_); - json_object_->SetNumberField("Answer Layer Size Weight", answer_layer_size_weight_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, button_layer_size_weight_)) - { - if (world->IsPlayInEditor()) - layout_buttons_->SetSizeWeight(button_layer_size_weight_); - json_object_->SetNumberField("Button Layer Size Weight", button_layer_size_weight_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, pre_post_size_weight_)) - { - if (world->IsPlayInEditor()) - { - pre_widget_->SetSizeWeight(pre_post_size_weight_); - post_widget_->SetSizeWeight(pre_post_size_weight_); - pre_widget_offsetter_->SetSizeWeight(pre_post_size_weight_); - post_widget_offsetter_->SetSizeWeight(pre_post_size_weight_); - } - json_object_->SetNumberField("Pre and Post Size Weight", pre_post_size_weight_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, no_answer_allowed_)) - { - if (world->IsPlayInEditor()) - { - no_answer_on_submit_button_ = no_answer_allowed_; - OnNoAnswerOnSubmitButtonChanged(); - } - json_object_->SetNumberField("No Answer Allowed", no_answer_allowed_); - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, no_answer_on_submit_button_)) - OnNoAnswerOnSubmitButtonChanged(); - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, custom_button_enabled_)) - { - if(custom_button_enabled_) - { - layout_submit_custom_child_ = layout_submit_->CreateLayoutChild(Alignment::VERTICAL, ULayoutComponent::StaticClass()); - custom_button_ = layout_submit_custom_child_->CreateWidgetChild("custom_button", widget_object_manager_.text_button_info); - custom_button_->SetText(custom_button_text_); - } - else - { - custom_button_->DestroyComponent(); - layout_submit_custom_child_->DestroyComponent(); - } - } - else if (prop_name == GET_MEMBER_NAME_CHECKED(ALikertScale, custom_button_text_)) - if(custom_button_enabled_) - custom_button_->SetText(custom_button_text_); - - SaveState(); - - if(GetWorld()->IsPlayInEditor()) - { - Update(); - } -} -#endif - -void ALikertScale::OnPrePostToggle() -{ - if(has_pre_post_text_) - { - pre_widget_ = layout_buttons_->CreateLayoutChild(Alignment::VERTICAL, UMultilineTextLayouter::StaticClass()); - post_widget_ = layout_buttons_->CreateLayoutChild(Alignment::VERTICAL, UMultilineTextLayouter::StaticClass()); - dynamic_cast<UMultilineTextLayouter*>(pre_widget_)->SetFontSize(pre_post_text_size_); - dynamic_cast<UMultilineTextLayouter*>(post_widget_)->SetFontSize(pre_post_text_size_); - pre_widget_->SetSizeWeight(pre_post_size_weight_); - post_widget_->SetSizeWeight(pre_post_size_weight_); - dynamic_cast<UMultilineTextLayouter*>(pre_widget_)->SetText(pre_text_, widget_object_manager_); - dynamic_cast<UMultilineTextLayouter*>(post_widget_)->SetText(post_text_, widget_object_manager_); - layout_buttons_->Update(); - dynamic_cast<UMultilineTextLayouter*>(pre_widget_)->SetText(pre_text_, widget_object_manager_); - dynamic_cast<UMultilineTextLayouter*>(post_widget_)->SetText(post_text_, widget_object_manager_); - pre_widget_offsetter_ = layout_text_->CreateLayoutChild(Alignment::VERTICAL, ULayoutComponent::StaticClass()); - post_widget_offsetter_ = layout_text_->CreateLayoutChild(Alignment::VERTICAL, ULayoutComponent::StaticClass()); - pre_widget_offsetter_->SetSizeWeight(pre_post_size_weight_); - post_widget_offsetter_->SetSizeWeight(pre_post_size_weight_); - pre_widget_offsetter_->SetPriority(2); - post_widget_offsetter_->SetPriority(0); - pre_widget_->SetPriority(2); - post_widget_->SetPriority(0); - } - else if(pre_widget_ != nullptr) - { - pre_widget_->DestroyComponent(); - post_widget_->DestroyComponent(); - pre_widget_offsetter_->DestroyComponent(); - post_widget_offsetter_->DestroyComponent(); - } -} - -void ALikertScale::DisableSubmitButton() -{ - submit_button_->DestroyComponent(); -} - - -void ALikertScale::OnNumberOfAnswerOptionsChanged() -{ - while(static_cast<uint32>(buttons_.Num()) < number_of_answer_options_) - { - buttons_.Add(layout_buttons_->CreateWidgetChild(*FString("Button").Append(FString::FromInt(buttons_.Num()-1)), widget_object_manager_.button_info)); - texts_.Add(layout_text_->CreateWidgetChild(*FString("Text").Append(FString::FromInt(buttons_.Num() - 1)), widget_object_manager_.text_info)); - texts_.Last()->SetFontSize(answer_text_size_); - if (answer_text_.Num() < buttons_.Num()) - answer_text_.Add(FString::FromInt(texts_.Num() - 1)); - texts_.Last()->SetText(answer_text_[buttons_.Num()-1]); - - } - while(static_cast<uint32>(buttons_.Num()) > number_of_answer_options_) - { - buttons_.Last()->DestroyComponent(); - buttons_.RemoveAt(buttons_.Num() - 1); - texts_.Last()->DestroyComponent(); - texts_.RemoveAt(texts_.Num() - 1); - answer_text_.RemoveAt(answer_text_.Num() - 1); - } -} - -void ALikertScale::OnWidgetPressed(UTextWidgetComponent * text_widget_cmp) -{ - if(text_widget_cmp == submit_button_) - { - if (selected_widget_ == nullptr) - { - if(no_answer_allowed_) - return; - - submitted_answer_ = "No Answer"; - } - else - for(auto i = 0; i < buttons_.Num(); ++i) - if(buttons_[i] == selected_widget_) - submitted_answer_ = texts_[i]->GetText(); - - FOnSubmitButtonPressed.Broadcast(); - SetVisibility(false); - } - - if(selected_widget_ == nullptr) - { - selected_widget_ = text_widget_cmp; - selected_widget_->SetTintColorAndOpacity(FLinearColor::Green); - submit_button_->SetText(FString("Submit")); - } - else if(selected_widget_ != text_widget_cmp) - { - selected_widget_->SetTintColorAndOpacity(FLinearColor::White); - selected_widget_ = text_widget_cmp; - selected_widget_->SetTintColorAndOpacity(FLinearColor::Green); - } - else if(selected_widget_ == text_widget_cmp) - { - selected_widget_->SetTintColorAndOpacity(FLinearColor::White); - selected_widget_ = nullptr; - if(no_answer_on_submit_button_) - submit_button_->SetText(FString("No Answer")); - } -} - -void ALikertScale::LoadState() -{ - FString json_str; - auto absolute_path = IFileManager::Get().ConvertToAbsolutePathForExternalAppForWrite(*FPaths::ProjectContentDir()) + "/MenuUMGBP/" + GetName().Append(FString(".json")); - auto & platform_file = FPlatformFileManager::Get().GetPlatformFile(); - - if(platform_file.FileExists(*absolute_path)) - FFileHelper::LoadFileToString(json_str, *absolute_path); - else - SaveState(); - - - IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); - - TSharedRef< TJsonReader<> > reader = TJsonReaderFactory<>::Create(json_str); - FJsonSerializer::Deserialize(reader, json_object_); - if(!json_object_.IsValid()) - { - json_object_ = MakeShareable(new FJsonObject); - return; - } - json_object_->TryGetNumberField(FString("Number of Answer Options"), number_of_answer_options_); - json_object_->TryGetStringField(FString("Question Text"), question_text_); - answer_text_.SetNum(number_of_answer_options_); - for (auto i = 0; i < answer_text_.Num(); ++i) - if(!json_object_->TryGetStringField(FString("Answer Text ").Append(*FString::FromInt(i)), answer_text_[i])) - answer_text_[i] = FString::FromInt(i); - - - json_object_->TryGetBoolField("Has Pre and Post Text", has_pre_post_text_); - json_object_->TryGetStringField("Pre Text", pre_text_); - json_object_->TryGetStringField("Post Text", post_text_); - json_object_->TryGetNumberField("Pre and Post Text Size", pre_post_text_size_); - json_object_->TryGetNumberField("Answer Text Size", answer_text_size_); - json_object_->TryGetNumberField("Question Size", question_size_); - json_object_->TryGetNumberField("Question Layer Size Weight", question_layer_size_weight_); - json_object_->TryGetNumberField("Answer Layer Size Weight", answer_layer_size_weight_); - json_object_->TryGetNumberField("Button Layer Size Weight", button_layer_size_weight_); - json_object_->TryGetNumberField("Pre and Post Size Weight", pre_post_size_weight_); -} - -void ALikertScale::SaveState() -{ - FString output_str; - auto Writer = TJsonWriterFactory<>::Create(&output_str); - FJsonSerializer::Serialize(json_object_.ToSharedRef(), Writer); - auto absolute_path = IFileManager::Get().ConvertToAbsolutePathForExternalAppForWrite(*FPaths::ProjectContentDir()).Append(FString("/MenuUMGBP")); - auto & platform_file = FPlatformFileManager::Get().GetPlatformFile(); - if (platform_file.CreateDirectoryTree(*absolute_path)) - { - auto full_path = absolute_path + "/" + GetName().Append(FString(".json")); - FFileHelper::SaveStringToFile(output_str, *full_path); - } - -} - -void ALikertScale::SetVisibility(bool val) -{ - SetActorEnableCollision(val); - SetActorHiddenInGame(!val); -} - -void ALikertScale::SetActorScale3D(FVector NewScale3D) -{ - Super::SetActorScale3D(NewScale3D); - Update(); - question_->Update(); -} - -FVector ALikertScale::GetSize() -{ - auto background_size = background_->GetDrawSize(); - return FVector(1.0f, background_size.X, background_size.Y ) * background_->RelativeScale3D; -} - -void ALikertScale::Update() -{ - layout_generell_->Update(); - -} - -FString ALikertScale::GetResult() -{ - return submitted_answer_; -} - -void ALikertScale::OnNoAnswerOnSubmitButtonChanged() -{ - if (GetWorld()->IsPlayInEditor()) - { - if (!no_answer_on_submit_button_) - submit_button_->SetText(FString("Submit")); - else if (selected_widget_ == nullptr) - submit_button_->SetText(FString("No Answer")); - } - json_object_->SetNumberField("No-Answer on Submit Button", no_answer_on_submit_button_); -} \ No newline at end of file diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScaleSequence.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScaleSequence.cpp deleted file mode 100644 index 98ab8a0..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/LikertScaleSequence.cpp +++ /dev/null @@ -1,75 +0,0 @@ - - -#include "LikertScaleSequence.h" -#include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h" -#if WITH_EDITOR -#include "LevelEditor.h" -#include "Editor.h" -#endif -#include "Runtime/Engine/Classes/Engine/Selection.h" - - -ALikertScaleSequence::ALikertScaleSequence() -{ - PrimaryActorTick.bCanEverTick = true; - - ConstructorHelpers::FClassFinder<UUserWidget> plane_asset(TEXT("/LikertPlugin/MenuUmgBP/Plane.Plane_C")); - if (!plane_asset.Succeeded()) - UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s")); - - on_submit_delegate_.BindUFunction(this, "OnChildScaleSubmitted"); -} - - -void ALikertScaleSequence::OnChildScaleSubmitted() -{ - ++visible_scale_index_; - if(visible_scale_index_ < likert_scale_vec_.Num()) - visible_scale_ = likert_scale_vec_[visible_scale_index_]; - - visible_scale_->SetVisibility(true); -} - -void ALikertScaleSequence::BeginPlay() -{ - Super::BeginPlay(); - - auto folder_name = GetName(); -#if WITH_EDITOR - this->SetFolderPath(*FString("/").Append(folder_name)); -#endif - - for(auto i = 0; i < likert_scale_vec_.Num(); ++i) - { -#if WITH_EDITOR - likert_scale_vec_[i]->SetFolderPath(*FString("/").Append(folder_name)); -#endif - if(i == 0) - visible_scale_ = likert_scale_vec_[i]; - else - likert_scale_vec_[i]->SetVisibility(false); - - - likert_scale_vec_[i]->FOnSubmitButtonPressed.Add(on_submit_delegate_); - } - -} - -#if WITH_EDITOR -void ALikertScaleSequence::Tick(float delta_time) -{ - auto selected_actors = GEditor->GetSelectedActors(); - - for (FSelectionIterator Iter(*selected_actors); Iter; ++Iter) - { - for(auto likert_scale : likert_scale_vec_) - if(likert_scale == dynamic_cast<ALikertScale*>(*Iter) && likert_scale != visible_scale_ && likert_scale != nullptr && visible_scale_ != nullptr) - { - likert_scale->SetVisibility(true); - if(visible_scale_ != nullptr) - visible_scale_->SetVisibility(false); - visible_scale_ = likert_scale; - } - } -} -#endif diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MenuUserWidget.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MenuUserWidget.cpp deleted file mode 100644 index cb28276..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MenuUserWidget.cpp +++ /dev/null @@ -1,24 +0,0 @@ - -#include "MenuUserWidget.h" - - -void UMenuUserWidget::SetText(FText text) -{ - text_ = text; - bIsFocusable = false; -} - -FText UMenuUserWidget::GetText() -{ - return text_; -} - -void UMenuUserWidget::OnWidgetPressed() -{ - owner_->OnWidgetPressed(); -} - -void UMenuUserWidget::SetOwner(UTextWidgetComponent * owner) -{ - owner_ = owner; -} diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultilineTextLayouter.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultilineTextLayouter.cpp deleted file mode 100644 index 0115a0c..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultilineTextLayouter.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "MultilineTextLayouter.h" - - -UMultilineTextLayouter::UMultilineTextLayouter() -{ - submenu_offset_factor_ = 0.0f; -} - -void UMultilineTextLayouter::SetText(FString str, WidgetObjectManager & widget_object_manager) -{ - TArray<FString> str_vec; - - auto substr_length = str.Find("\\"); - while (substr_length >= 0) - { - str_vec.Add(str.Mid(0, substr_length)); - str = str.Mid(substr_length + 1, str.Len() - (substr_length + 1)); - substr_length = str.Find("\\"); - } - str_vec.Add(str.Mid(0, str.Len())); - - while(GetNumChildrenComponents() > str_vec.Num()) - GetChildComponent(GetNumChildrenComponents()-1)->DestroyComponent(); - while(GetNumChildrenComponents() < str_vec.Num()) - CreateWidgetChild(*FString("Line").Append(FString::FromInt(GetNumChildrenComponents() - 1)), widget_object_manager.text_info)->SetFontSize(font_size_ * children_.Num()); - - Update(); - for(auto i = 0 ; i < children_.Num(); ++i) - { - dynamic_cast<UTextWidgetComponent*>( children_[i] )->SetText(FString(str_vec[i])); - dynamic_cast<UTextWidgetComponent*>( children_[i] )->SetFontSize(font_size_ * children_.Num()); - } - -} - -void UMultilineTextLayouter::SetFontSize(int size) -{ - font_size_ = size; - for (auto & child : children_) - dynamic_cast<UTextWidgetComponent*>(child)->SetFontSize(font_size_ * children_.Num()); -} - -void UMultilineTextLayouter::DestroyComponent(bool bPromoteChildren) -{ - for (auto & child : children_) - dynamic_cast<UTextWidgetComponent*>(child)->DestroyComponent(); - - Super::DestroyComponent(); -} \ No newline at end of file diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultipleLikertScale.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultipleLikertScale.cpp deleted file mode 100644 index fd5f60a..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/MultipleLikertScale.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "MultipleLikertScale.h" -#include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h" -#if WITH_EDITOR -#include "LevelEditor.h" -#include "Editor.h" -#endif -#include "Runtime/Engine/Classes/Engine/Selection.h" - -// Sets default values -AMultipleLikertScale::AMultipleLikertScale() -{ - PrimaryActorTick.bCanEverTick = true; - - ConstructorHelpers::FClassFinder<UUserWidget> plane_asset(TEXT("/LikertPlugin/MenuUmgBP/Plane.Plane_C")); - if (!plane_asset.Succeeded()) - UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s")); - - on_submit_delegate_.BindUFunction(this, "OnChildScaleSubmitted"); -} - -TArray<FString> AMultipleLikertScale::GetResult() -{ - return result_; -} - -void AMultipleLikertScale::OnChildScaleSubmitted() -{ - for(auto & likert_scale : likert_scale_vec_) - if(likert_scale->GetResult() == "nosubmit") - { - likert_scale_vec_[0]->SetVisibility(true); - return; - } - - for(auto i = 0; i < likert_scale_vec_.Num(); ++i) - { - result_.Add(likert_scale_vec_[i]->GetResult()); - likert_scale_vec_[i]->SetVisibility(false); - } - - FOnSubmitButtonPressed.Broadcast(); -} - -// Called when the game starts or when spawned -void AMultipleLikertScale::BeginPlay() -{ - Super::BeginPlay(); - - auto folder_name = GetName(); -#if WITH_EDITOR - this->SetFolderPath(*FString("/").Append(folder_name)); -#endif - if(likert_scale_vec_.Num() == 0) - return; - - auto size = FVector::ZeroVector; - for (auto i = 0; i < likert_scale_vec_.Num(); ++i) - { -#if WITH_EDITOR - likert_scale_vec_[i]->SetFolderPath(*FString("/").Append(folder_name)); -#endif - likert_scale_vec_[i]->FOnSubmitButtonPressed.Add(on_submit_delegate_); - size += likert_scale_vec_[i]->GetSize(); - } - - auto lower_location = likert_scale_vec_.Last()->GetActorLocation(); - for(auto i = 1; i < likert_scale_vec_.Num(); ++i) - { - likert_scale_vec_[i]->DisableSubmitButton(); - auto translation = FVector(0.0f, 0.0f, likert_scale_vec_[i - 1]->GetSize().Z); - likert_scale_vec_[i]->SetActorLocation(likert_scale_vec_[i-1]->GetActorLocation() + translation); - } -} diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/TextWidgetComponent.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/TextWidgetComponent.cpp deleted file mode 100644 index 14b9087..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/TextWidgetComponent.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "TextWidgetComponent.h" -#include "MenuUserWidget.h" -#include "LikertScale.h" - -UTextWidgetComponent::UTextWidgetComponent() -{ - default_draw_size_ = FVector2D(1280.0, 720.0); - -} - -void UTextWidgetComponent::SetSize(FTransform & transform, FVector parent_size) -{ - if(!change_rel_size_) - { - auto z_scale = transform.GetScale3D().Z; - auto vertical_scale = parent_size.Y / (z_scale * parent_size.Z); - auto new_scale = FVector(transform.GetScale3D().X, z_scale * parent_size.Z / parent_size.Y, z_scale); - transform.SetScale3D(new_scale); - SetRelativeTransform(transform); - auto draw_size_ = FVector2D(default_draw_size_.X * vertical_scale, default_draw_size_.Y); - SetDrawSize(draw_size_); - } - else - { - SetRelativeTransform(transform); - } -} - -void UTextWidgetComponent::SetPriority(uint8 priority) -{ - priority_ = priority; -} - -uint8 UTextWidgetComponent::GetPriority() -{ - return priority_; -} - -void UTextWidgetComponent::SetText(FString text) -{ - dynamic_cast<UMenuUserWidget*>(Widget)->SetText(FText::FromString(text)); -} - -void UTextWidgetComponent::SetFontSize(int font_size) -{ - dynamic_cast<UMenuUserWidget*>(Widget)->SetSizeOfFont(font_size); -} - -void UTextWidgetComponent::SetChangeRelSize(bool change_rel_size) -{ - change_rel_size_ = change_rel_size; -} - -void UTextWidgetComponent::OnWidgetPressed() -{ - if(this != nullptr) - dynamic_cast<ALikertScale*>(this->GetOwner())->OnWidgetPressed(this); -} - -void UTextWidgetComponent::Init() -{ - dynamic_cast<UMenuUserWidget*>(Widget)->SetOwner(this); -} - -FString UTextWidgetComponent::GetText() -{ - return dynamic_cast<UMenuUserWidget*>(Widget)->GetText().ToString(); -} \ No newline at end of file diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/WidgetObjectManager.cpp b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/WidgetObjectManager.cpp deleted file mode 100644 index 4a9c5a1..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Private/WidgetObjectManager.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "WidgetObjectManager.h" -#include "Runtime/UMG/Public/Blueprint/UserWidget.h" -#include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h" -#include "Runtime/Core/Public/Misc/FileHelper.h" -#include "Runtime/CoreUObject/Public/UObject/UObjectThreadContext.h" - -WidgetObjectManager::WidgetObjectManager() -{ - auto & thread_context = FUObjectThreadContext::Get(); - if(!thread_context.IsInConstructor) - return; - - - ConstructorHelpers::FClassFinder<UUserWidget> button_asset(TEXT("/LikertPlugin/MenuUmgBP/Button.Button_C")); - ConstructorHelpers::FClassFinder<UUserWidget> text_button_asset(TEXT("/LikertPlugin/MenuUmgBP/TextButton.TextButton_C")); - ConstructorHelpers::FClassFinder<UUserWidget> plane_asset(TEXT("/LikertPlugin/MenuUmgBP/Plane.Plane_C")); - ConstructorHelpers::FClassFinder<UUserWidget> text_asset(TEXT("/LikertPlugin/MenuUmgBP/Text.Text_C")); - if (!button_asset.Succeeded()) - UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s")); - if (!text_button_asset.Succeeded()) - UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s")); - if (!plane_asset.Succeeded()) - UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s")); - if (!text_asset.Succeeded()) - UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s")); - - button_info.uclass = button_asset.Class; - button_info.res_x = 1280; - button_info.res_y = 720; - button_info.change_rel_size = true; - - text_button_info.uclass = text_button_asset.Class; - text_button_info.res_x = 1280; - text_button_info.res_y = 720; - text_button_info.change_rel_size = false; - - plane_info.uclass = plane_asset.Class; - plane_info.res_x = 1280; - plane_info.res_y = 720; - plane_info.change_rel_size = true; - - text_info.uclass = text_asset.Class; - text_info.res_x = 1280; - text_info.res_y = 720; - text_info.change_rel_size = false; -} - -WidgetObjectManager::~WidgetObjectManager() -{ -} diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LayoutComponent.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LayoutComponent.h deleted file mode 100644 index d383200..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LayoutComponent.h +++ /dev/null @@ -1,52 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "Components/SceneComponent.h" -#include "Components/WidgetComponent.h" -#include "TextWidgetComponent.h" -#include "WidgetObjectManager.h" -#include "LayoutComponent.generated.h" - -UENUM() -enum Alignment { - VERTICAL, - HORIZONTAL -}; - -UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) -class LIKERTPLUGIN_API ULayoutComponent : public USceneComponent -{ - GENERATED_BODY() - -public: - ULayoutComponent(); - void Init(FVector2D res, Alignment alignment, FVector rel_loc); - - void Update(); - - ULayoutComponent * CreateLayoutChild(Alignment alignment, UClass * uclass); - UTextWidgetComponent * CreateWidgetChild(FName name, WidgetObjectManager::AssetInfo & asset, int priority = 1); - void DestroyChild(int index); - - virtual void SetPriority(uint8 priority); - virtual uint8 GetPriority(); - - virtual void SetSizeWeight(float size_weight); -protected: - float submenu_offset_factor_ = 0.05f; - TArray<USceneComponent*> children_; - -private: - void prioritize(); - -private: - FVector2D res_; - float size_weight_ = 1.0f; - - uint8 priority_ = 1; - - TEnumAsByte<Alignment> alignment_; - -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertPlugin.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertPlugin.h deleted file mode 100644 index 0b0b822..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertPlugin.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Modules/ModuleManager.h" - -class FLikertPluginModule : public IModuleInterface -{ -public: - - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScale.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScale.h deleted file mode 100644 index e8149dd..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScale.h +++ /dev/null @@ -1,142 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "GameFramework/Actor.h" -#include "Components/WidgetComponent.h" -#include "LayoutComponent.h" -#include "Json.h" -#include "MultilineTextLayouter.h" -#include "WidgetObjectManager.h" -#include "LikertScale.generated.h" - -DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnSubmitButtonPressedEvent); - -UCLASS() -class LIKERTPLUGIN_API ALikertScale : public AActor -{ -friend class AMultipleLikertScale; - GENERATED_BODY() - -public: - ALikertScale(); - - void OnWidgetPressed(UTextWidgetComponent * text_widget_cmp); - UPROPERTY(BlueprintAssignable, Category = "Event") - FOnSubmitButtonPressedEvent FOnSubmitButtonPressed; - - UFUNCTION(BlueprintCallable, Category = "Result") - FString GetResult(); - - void Update(); - virtual void SetVisibility(bool val); - - void SetActorScale3D(FVector NewScale3D); - - FVector GetSize(); - -private: - - virtual void OnNumberOfAnswerOptionsChanged(); - virtual void BeginPlay() override; - - void LoadState(); - void SaveState(); - -#if WITH_EDITOR - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; -#endif - -protected: - - virtual void OnNoAnswerOnSubmitButtonChanged(); - -private: - ULayoutComponent * CreateLayoutChild(Alignment alignment, USceneComponent * parent, UClass * uclass); - - void OnPrePostToggle(); - - void DisableSubmitButton(); - - -private: - TSharedPtr<FJsonObject> json_object_; - - UTextWidgetComponent * selected_widget_; - UTextWidgetComponent * submit_button_; - UTextWidgetComponent * custom_button_; - - WidgetObjectManager widget_object_manager_; - - TArray<UTextWidgetComponent*> buttons_; - TArray<UTextWidgetComponent*> texts_; - - ULayoutComponent * question_; - UTextWidgetComponent * background_; - - ULayoutComponent * post_widget_; - ULayoutComponent * pre_widget_; - ULayoutComponent * pre_widget_offsetter_; - ULayoutComponent * post_widget_offsetter_; - - ULayoutComponent * layout_generell_; - ULayoutComponent * layout_buttons_; - ULayoutComponent * layout_text_; - ULayoutComponent * layout_submit_; - ULayoutComponent * layout_submit_child_, * layout_submit_custom_child_; - - FString submitted_answer_ = "nosubmit"; - - UPROPERTY(EditAnywhere, Category = LikertScale) - uint32 number_of_answer_options_ = 5; - - UPROPERTY(EditAnywhere, Category = LikertScale) - FString question_text_ = FString("Insert the question here"); - - UPROPERTY(EditAnywhere, Category = LikertScale) - int question_size_ = 300; - - UPROPERTY(EditAnywhere, Category = LikertScale) - TArray<FString> answer_text_; - - UPROPERTY(EditAnywhere, Category = LikertScale) - int answer_text_size_ = 300; - - UPROPERTY(EditAnywhere, Category = LikertScale) - bool has_pre_post_text_ = true; - - UPROPERTY(EditAnywhere, Category = LikertScale) - int pre_post_text_size_ = 175; - - UPROPERTY(EditAnywhere, Category = LikertScale) - double pre_post_size_weight_ = 2.0f; - - UPROPERTY(EditAnywhere, Category = LikertScale) - FString pre_text_ = FString("strongly\\disagree"); - - UPROPERTY(EditAnywhere, Category = LikertScale) - FString post_text_ = FString("strongly\\agree"); - - UPROPERTY(EditAnywhere, Category = LikertScale) - double question_layer_size_weight_ = 1.0f; - - UPROPERTY(EditAnywhere, Category = LikertScale) - double answer_layer_size_weight_ = 1.0f; - - UPROPERTY(EditAnywhere, Category = LikertScale) - double button_layer_size_weight_ = 2.0f; - - UPROPERTY(EditAnywhere, Category = LikertScale) - bool no_answer_allowed_ = true; - - UPROPERTY(EditAnywhere, Category = LikertScale) - bool no_answer_on_submit_button_ = true; - - UPROPERTY(EditAnywhere, Category = LikertScale) - bool custom_button_enabled_ = false; - - UPROPERTY(EditAnywhere, Category = LikertScale) - FString custom_button_text_ = FString("custom button text"); - -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScaleSequence.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScaleSequence.h deleted file mode 100644 index bbc7838..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/LikertScaleSequence.h +++ /dev/null @@ -1,41 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "LikertScale.h" -#include "GameFramework/Actor.h" -#include "LikertScaleSequence.generated.h" - -UCLASS() -class LIKERTPLUGIN_API ALikertScaleSequence : public AActor -{ - GENERATED_BODY() - -public: - ALikertScaleSequence(); - -protected: - UFUNCTION() - void OnChildScaleSubmitted(); - - virtual void BeginPlay() override; - -#if WITH_EDITOR - virtual void Tick(float delta_time) override; -#endif - - -private: - - -private: - int visible_scale_index_; - ALikertScale * visible_scale_; - - UPROPERTY(EditAnywhere, Category = LikertScale) - TArray<ALikertScale*> likert_scale_vec_; - - FScriptDelegate on_submit_delegate_; - -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MenuUserWidget.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MenuUserWidget.h deleted file mode 100644 index dc91233..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MenuUserWidget.h +++ /dev/null @@ -1,41 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "Blueprint/UserWidget.h" -#include "TextWidgetComponent.h" -#include "MenuUserWidget.generated.h" - -/** - * - */ -UCLASS() -class LIKERTPLUGIN_API UMenuUserWidget : public UUserWidget -{ - GENERATED_BODY() - - -public: - void SetText(FText text); - FText GetText(); - - void SetOwner(UTextWidgetComponent * owner); - - UFUNCTION(Category = "FontSize", BlueprintImplementableEvent) - void SetSizeOfFont(int size); - - UFUNCTION(Category = "WidgetPressed", BlueprintCallable) - void OnWidgetPressed(); - - -private: - UTextWidgetComponent * owner_; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = true), Category = "Text") - FText text_; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = true), Category = "Text") - int font_size_; - -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultilineTextLayouter.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultilineTextLayouter.h deleted file mode 100644 index 0ec8c3e..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultilineTextLayouter.h +++ /dev/null @@ -1,27 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "LayoutComponent.h" -#include "MultilineTextLayouter.generated.h" - -/** - * - */ -UCLASS() -class LIKERTPLUGIN_API UMultilineTextLayouter : public ULayoutComponent -{ - GENERATED_BODY() - -public: - UMultilineTextLayouter(); - - void SetText(FString str, WidgetObjectManager & widget_object_manager); - void SetFontSize(int size); - - virtual void DestroyComponent(bool bPromoteChildren = false) override; - -private: - float font_size_ = 300.0f; -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultipleLikertScale.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultipleLikertScale.h deleted file mode 100644 index 8dc0854..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/MultipleLikertScale.h +++ /dev/null @@ -1,41 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "LikertScale.h" -#include "GameFramework/Actor.h" -#include "MultipleLikertScale.generated.h" - -DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnChildSubmit); -UCLASS() -class LIKERTPLUGIN_API AMultipleLikertScale : public AActor -{ - GENERATED_BODY() - -public: - AMultipleLikertScale(); - - UFUNCTION(BlueprintCallable, Category = "Result") - TArray<FString> GetResult(); - - UPROPERTY(BlueprintAssignable, Category = "Event") - FOnChildSubmit FOnSubmitButtonPressed; - -protected: - UFUNCTION() - void OnChildScaleSubmitted(); - - virtual void BeginPlay() override; - -private: - int visible_scale_index_; - - UPROPERTY(EditAnywhere, Category = LikertScale) - TArray<ALikertScale*> likert_scale_vec_; - - FScriptDelegate on_submit_delegate_; - - TArray<FString> result_; - -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/TextWidgetComponent.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/TextWidgetComponent.h deleted file mode 100644 index b577075..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/TextWidgetComponent.h +++ /dev/null @@ -1,35 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "Components/WidgetComponent.h" -#include "TextWidgetComponent.generated.h" - -/** - * - */ -UCLASS() -class LIKERTPLUGIN_API UTextWidgetComponent : public UWidgetComponent -{ - GENERATED_BODY() -public: - UTextWidgetComponent(); - void SetChangeRelSize(bool change_rel_size); - void OnWidgetPressed(); - void Init(); - -public: - void SetSize(FTransform & transform, FVector parent_size); - void SetText(FString text); - FString GetText(); - void SetPriority(uint8 priority); - uint8 GetPriority(); - - void SetFontSize(int font_size); - -private: - FVector2D default_draw_size_; - uint8 priority_ = 1; - bool change_rel_size_ = true; -}; diff --git a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/WidgetObjectManager.h b/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/WidgetObjectManager.h deleted file mode 100644 index 1a64843..0000000 --- a/LikertPlugin/LikertPlugin/Source/LikertPlugin/Public/WidgetObjectManager.h +++ /dev/null @@ -1,24 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -/** - * - */ -struct LIKERTPLUGIN_API WidgetObjectManager -{ - WidgetObjectManager(); - ~WidgetObjectManager(); - - struct AssetInfo { - float res_x, res_y; - TSubclassOf<UUserWidget> uclass; - bool change_rel_size; - }; - - AssetInfo button_info; - AssetInfo text_button_info; - AssetInfo plane_info; - AssetInfo text_info; -}; diff --git a/WidgetInteraction/Resources/Icon128.png b/WidgetInteraction/Resources/Icon128.png deleted file mode 100644 index 1231d4aad4d0d462fb7b178eb5b30aa61a10df0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12699 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 GGywqo=2LS3 -- GitLab