// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "SCompoundWidget.h" #include "Singleton/MidiSequencer.h" class FMidiMessageSequence; class FPluginHost; class FPattern; class ARONA_API SPatternThumbnail : public SCompoundWidget { public: void SetPattern(FPattern* InPattern) { OnPatternChanged(CurrentPattern, InPattern); CurrentPattern = InPattern; } FPattern* GetPattern() const { return CurrentPattern; } virtual void Redraw() {} TRange MidiTickRange; protected: virtual void OnPatternChanged(FPattern* OldPattern, FPattern* NewPattern) {} private: FPattern* CurrentPattern = nullptr; }; class ARONA_API SNullPatternThumbnail : public SPatternThumbnail { public: SLATE_BEGIN_ARGS(SNullPatternThumbnail) { } SLATE_END_ARGS() /** Constructs this widget with InArgs */ void Construct(const FArguments& InArgs, FText InText); static TSharedRef Create(FText InText); }; /** * */ class ARONA_API SAutoPatternThumbnail : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SAutoPatternThumbnail) { } SLATE_END_ARGS() /** Constructs this widget with InArgs */ void Construct(const FArguments& InArgs, FPattern* InPattern); void SetPattern(FPattern* InPattern); FPattern* GetPattern() const { return Pattern; } virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override; virtual FVector2D ComputeDesiredSize(float LayoutScaleMultiplier) const override; virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override; FPatternDelegate OnPatternClicked; private: TSharedPtr CreateThumbnail(FPattern* InPattern); TSharedPtr Thumbnail; FPattern* Pattern = nullptr; bool bNeedRedraw = true; };