r5sdk/r5dev/thirdparty/cppnet/cppkore/ContainerControl.h

100 lines
3.2 KiB
C
Raw Normal View History

2022-05-21 19:58:09 +02:00
#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();
};
}