57 lines
1.6 KiB
C++
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;
|
|
};
|