mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
100 lines
3.2 KiB
C++
100 lines
3.2 KiB
C++
#pragma once
|
|
|
|
#include "Control.h"
|
|
#include "AutoScaleMode.h"
|
|
|
|
namespace Forms
|
|
{
|
|
// TODO: Process [*] Key functions, virtual...
|
|
|
|
class ContainerControl : public Control
|
|
{
|
|
public:
|
|
ContainerControl();
|
|
virtual ~ContainerControl() = default;
|
|
|
|
// Indicates the current active control on the container control.
|
|
Control* ActiveControl();
|
|
// Indicates the current active control on the container control.
|
|
void SetActiveControl(Control* Value);
|
|
|
|
// Activates a control
|
|
bool ActivateControl(Control* Value);
|
|
|
|
// Represents the DPI or Font setting that the control has been scaled to or designed at.
|
|
Drawing::SizeF AutoScaleDimensions();
|
|
// Represents the DPI or Font setting that the control has been scaled to or designed at.
|
|
void SetAutoScaleDimensions(Drawing::SizeF Size);
|
|
|
|
// Gets the current auto scale ratio.
|
|
Drawing::SizeF CurrentAutoScaleDimensions();
|
|
|
|
// Determines the scaling mode of this control.
|
|
AutoScaleMode AutoScaleMode();
|
|
// Determines the scaling mode of this control.
|
|
void SetAutoScaleMode(Forms::AutoScaleMode Mode);
|
|
|
|
// Override WndProc for specific form messages.
|
|
virtual void WndProc(Message& Msg);
|
|
|
|
protected:
|
|
// Get custom control creation parameters for this instance.
|
|
virtual CreateParams GetCreateParams();
|
|
// Make sure we set this so we know if we are a container.
|
|
virtual bool IsContainerControl();
|
|
|
|
// Internal routine to active a control.
|
|
bool ActivateControlInternal(Control* Ctrl, bool Originator);
|
|
// Internal routine to set active control.
|
|
bool AssignActiveControlInternal(Control* Ctrl);
|
|
|
|
// Internal selection routine
|
|
virtual void Select(bool Directed, bool Forward);
|
|
// Internal routine to scale a control
|
|
virtual void Scale(Drawing::SizeF IncludedFactor, Drawing::SizeF ExcludedFactor, Control* Ctrl);
|
|
// Internal layout resuming routine
|
|
virtual void OnLayoutResuming(bool PerformLayout);
|
|
// Internal child layout resuming routine
|
|
virtual void OnChildLayoutResuming(Control* Child, bool PerformLayout);
|
|
|
|
// Sets focus to the active control.
|
|
void FocusActiveControlInternal();
|
|
|
|
// Internal routine to set a control as active.
|
|
void SetActiveControlInternal(Control* Value);
|
|
|
|
// Gets the parent form, if any.
|
|
Control* ParentFormInternal();
|
|
|
|
// Fetches the auto scale ratio for the given settings.
|
|
Drawing::SizeF AutoScaleFactor();
|
|
|
|
private:
|
|
// Internal cached flags
|
|
Control* _ActiveControl;
|
|
Control* _FocusedControl;
|
|
|
|
Drawing::SizeF _AutoScaleDimensions;
|
|
Drawing::SizeF _CurrentAutoScaleDimensions;
|
|
|
|
Forms::AutoScaleMode _AutoScaleMode;
|
|
bool _ScalingNeededOnLayout;
|
|
|
|
// We must define each window message handler here...
|
|
void WmSetFocus(Message& Msg);
|
|
|
|
// Internal routine to enable scaling on child controls.
|
|
void LayoutScalingNeeded();
|
|
// Internal routine to set scaling flag.
|
|
void EnableRequiredScaling(Control* Ctrl, bool Enable);
|
|
|
|
// Internal routine to determinalistically perform scaling.
|
|
void PerformNeededAutoScaleOnLayout();
|
|
|
|
// Performs scaling of this control. Scaling works by scaling all children of this control.
|
|
void PerformAutoScale(bool IncludeBounds, bool ExcludeBounds);
|
|
|
|
// Internal routine to calculate the font scale ratio.
|
|
Drawing::SizeF GetFontAutoScaleDimensions();
|
|
};
|
|
} |