2024-01-25 11:21:15 +08:00

57 lines
1.6 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "SCompoundWidget.h"
#include "Midi/Time/TimePos.h"
#include "UI/Widget/IChildWindow.h"
class FPluginHost;
class SScrollBox;
class FMidiMessageSequence;
class SScrollBar;
class SPianoRollPanel;
/**
*
*/
class ARONA_API SPianoRoll : public SCompoundWidget, public IChildWindow
{
public:
SLATE_BEGIN_ARGS(SPianoRoll)
{
}
SLATE_END_ARGS()
/** Constructs this widget with InArgs */
void Construct(const FArguments& InArgs, FMidiMessageSequence* InMidiMessageSequence, FPluginHost* InPluginHost);
virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override;
virtual FReply OnMouseWheel(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
void AddFrameRangeDelta(AudioFrame InDelta);
void SetFrameRange(TRange<AudioFrame> InMidiRange);
void AddYDelta(float InDelta);
void InitScrollBar();
virtual TSharedRef<SWidget> GetWidget() override { return AsShared(); }
virtual TSharedPtr<SWidget> GetFocusWidget() override;
private:
void OnHorizontalScrollBarChanged(float InScrollOffsetFraction);
void OnPanelRequestHScroll(bool InStatus);
float KeyHeight = 20.f;
TSharedPtr<SPianoRollPanel> PianoRollPanel;
TSharedPtr<SScrollBox> ScrollBox;
TSharedPtr<SScrollBar> VerticalScrollBar;
TSharedPtr<SScrollBar> HorizontalScrollBar;
TRange<AudioFrame> TargetMidiTickRange;
FMidiMessageSequence* MidiMessageSequence = nullptr;
bool EnableHorizontalScroll = false;
};