IControl



Describes minimum required functionality for any control.

You can find more information in comments below. Overrided methods can be found in corresponding base interface.

class IControl : public virtual IComponent
{
public:
    // Events from parent control
    void(*OnParentStyleChange)(IControl *sender); // Event called when parent style has been changed and this control uses it
    void(*OnParentFontChange)(IControl *sender); // Event called when parent font has been changed and this control uses it
    void(*OnParentResize)(IControl *sender); // Event called when parent size has been changed
    void(*OnParentTransform)(IControl *sender); // Event called when parent has been transformed
    void(*OnParentTransformControls)(IControl *sender); // Event called when parent child transformation has been changed

    // Events from child controls
    void(*OnChildStyleChange)(IControl *sender, IControl *control); // Event called when child control style has been changed
    void(*OnChildFontChange)(IControl *sender, IControl *control); // Event called when child control font has been changed
    void(*OnChildTransform)(IControl *sender, IControl *control); // Event called when child control has been transformed
    void(*OnChildResize)(IControl *sender, IControl *control); // Event called when child control size has been changed
    void(*OnChildShow)(IControl *sender, IControl *control); // Event called when child control has became visible
    void(*OnChildHide)(IControl *sender, IControl *control); // Event called when child control has became invisible
    void(*OnChildAttach)(IControl *sender, IControl *control); // Event called when child control has been added
    void(*OnChildDetach)(IControl *sender, IControl *control); // Event called when child control has been removed
    void(*OnChildEnable)(IControl *sender, IControl *control); // Event called when child control has become enabled
    void(*OnChildDisable)(IControl *sender, IControl *control); // Event called when child control has became disabled

    // State change events
    void(*OnShow)(IControl *sender); // Event called when the control has became visible
    void(*OnHide)(IControl *sender); // Event called when the control has became invisible
    void(*OnEnable)(IControl *sender); // Event called when the control has became enabled
    void(*OnDisable)(IControl *sender); // Event called when the control has became disabled
    void(*OnResize)(IControl *sender); // Event called when the control size had been changed
    void(*OnTransform)(IControl *sender); // Event called when the control has been transformed
    void(*OnTransformControls)(IControl *sender); // Event called when the control child transformation has been changed
    void(*OnStyleChange)(IControl *sender); // Event called when the control style has been changed
    void(*OnFontChange)(IControl *sender); // Event called when the control font has been changed
    void(*OnSetModal)(IControl *sender); // Event called when the control has became modal
    void(*OnKillModal)(IControl *sender); // Event called when the control has lost modal state
    void(*OnSetFocus)(IControl *sender, const MESSAGE_FOCUS &m); // Event called when the control has received keyboard focus
    void(*OnKillFocus)(IControl *sender); // Event called when the control has lost keyboard focus
    void(*OnSetCaptureKeyboard)(IControl *sender); // Event called when the control has captured keyboard input
    void(*OnKillCaptureKeyboard)(IControl *sender); // Event called when the control has lost capture of keyboard input
    void(*OnSetCaptureMouse)(IControl *sender); // Event called when the control has captured mouse input
    void(*OnKillCaptureMouse)(IControl *sender); // Event called when the control has lost capture of mouse input
    void(*OnActivate)(IControl *sender); // Event called when the control has became active
    void(*OnDeactivate)(IControl *sender); // Event called when the control has lost active state

    // Paint events
    void(*OnPaint)(IControl *sender, const MESSAGE_PAINT &m, bool &draw_children); // Event called at the beginning of the control painting
    void(*OnPaintEnd)(IControl *sender, const MESSAGE_PAINT &m); // Event called at the end of the control painting

    // Keyboard input events
    void(*OnKeyDown)(IControl *sender, const MESSAGE_KEY &m, bool &processed); // Event called when keyboard key has been down
    void(*OnKeyUp)(IControl *sender, const MESSAGE_KEY &m, bool &processed); // Event called when keyboard key has been released
    void(*OnChar)(IControl *sender, const MESSAGE_CHAR &m, bool &processed); // Event called when character has been received from keyboard input
    void(*OnDeadChar)(IControl *sender, const MESSAGE_CHAR &m, bool &processed); // Event called when composite character(like umlaut-O) has been received fro keyboard input

    // Mouse input events
    void(*OnMouseHover)(IControl *sender, const MESSAGE_POSITION &m); // Event called when the control appears under mouse pointer
    void(*OnMouseLeave)(IControl *sender); // Event called when mouse pointer left control area
    void(*OnMouseMove)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when mouse pointer is moving
    void(*OnLeftMouseButtonDown)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when left mouse button has been down
    void(*OnLeftMouseButtonUp)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when left mouse button has been released
    void(*OnLeftMouseButtonDoubleClick)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when left mouse button has been double clicked
    void(*OnRightMouseButtonDown)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when right mouse button has been down
    void(*OnRightMouseButtonUp)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when right mouse button has been released
    void(*OnRightMouseButtonDoubleClick)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when right mouse button has been double clicked
    void(*OnMiddleMouseButtonDown)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when middle mouse button has been down
    void(*OnMiddleMouseButtonUp)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when middle mouse button has been released
    void(*OnMiddleMouseButtonDoubleClick)(IControl *sender, const MESSAGE_MOUSE &m, bool &processed); // Event called when middle mouse button has been double clicked
    void(*OnMouseVerticalWheel)(IControl *sender, const MESSAGE_MOUSE_WHEEL &m, bool &processed); // Event called when mouse vertical wheel has been scrolled
    void(*OnMouseHorizontalWheel)(IControl *sender, const MESSAGE_MOUSE_WHEEL &m, bool &processed); // Event called when mouse horizontal wheel has been scrolled

    // Other input events
    void(*OnDropFiles)(IControl *sender, const MESSAGE_DROP_FILES &m, bool &processed, bool &accepted); // Event called when files have been dropped over control

    // Clipboard events(since 9.0.0)
    void(*OnPasteString)(IControl *sender, const MESSAGE_PASTE_STRING &m); // Event called when a string to paste becomes available after paste request

    virtual IControl *getParent() = 0; // Return parent control
    virtual IStyle *getParentStyle() = 0; // Return parent style
    virtual IStyle *getStyle() = 0; // Return style. It could be either its own or parent control/form style, depending on settings
    virtual IStyle *getControlStyle() = 0; // Return its own style
    virtual IFont *getFont() = 0; // Return font. It could be either its own or parent control/form font, depending on settings
    virtual IFont *getParentFont() = 0; // Return parent font
    virtual IFont *getControlFont() = 0; // Return its own font
    virtual int getControlCount(const bool total = false) = 0; // Return direct or all child control count
    virtual IControl *getControl(const int index) = 0; // Return child control by index
    virtual IControl *getControl(const String &name) = 0; // Return child control by name
    virtual IControl *getControl(const PointF &position) = 0; // Return child control at specified position. Position is in form client area coordinates
    virtual int getControlIndex(IControl *control) = 0; // Return child control index or -1
    virtual ITransform *getTransform() = 0; // Return transformation
    virtual ITransform *getTransformControls() = 0; // Return child controls transformation
    virtual Matrix getTransformMatrix() = 0; // Return transformation matrix. Absolute to form client coordinate system
    virtual ALIGN getAlign() = 0; // Return alignment. By default alNone
    virtual RectF getConstraints() = 0; // Return constraints. Left, Top - minimum width and height. Right, Bottom - maximum width and height. 0 - no limits. By default none(0, 0, 0, 0)
    virtual PointF getMinConstraints() = 0; // Return minimum allowed width and height
    virtual PointF getMaxConstraints() = 0; // Return maximum allowed width and height
    virtual float getMinWidth() = 0; // Return minimum allowed width
    virtual float getMinHeight() = 0; // Return minimum allowed height
    virtual float getMaxWidth() = 0; // Return maximum allowed width
    virtual float getMaxHeight() = 0; // Return maximum allowed height
    virtual PointF getSize() = 0; // Return width and height
    virtual float getWidth() = 0; // Return width
    virtual float getHeight() = 0; // Return height
    virtual RectF getRect() = 0; // Return rectangle. Left, Top is always 0, 0. Right, Bottom is equal to width, height
    virtual RectF getClientRect() = 0; // Return rectangle of client area in local coordinates. By default return the same as getRect()
    virtual RectF getRenderRect() = 0; // Return rectangle of rendering area(for example, control + it's shadow) in local coordinates. By default return the same as getRect()
    virtual int getZIndex() = 0; // Return Z-index. By default all controls have z-index equal to 0. It affects drawing order
    virtual CURSOR_TYPE getCursor() = 0; // Return cursor type when mouse pointer is over the control. But default crArrow
    virtual int getTabOrder() = 0; // Return tab order. Affects order in which controls will get focus by Tab and Shift+Tab. It set automatically when control is added to form
    virtual String getHintText() = 0; // Return hint text for the control. By default empty
    virtual float getHintDelay() = 0; // Return delay before hint appear(in seconds). By default 0
    virtual PointF getHintShift() = 0; // Return shift of the hint around the control. By default 0, 0
    virtual bool isAcceptForm() = 0; // Whether it can be placed on a form directly
    virtual bool isAcceptForm(IForm *form) = 0; // Whether it can be placed on the specified form directly
    virtual bool isAcceptControl() = 0; // Whether it can be placed on a control
    virtual bool isAcceptControl(IControl *control) = 0; // Whether it can be placed on the specified control
    virtual bool isAcceptControls() = 0; // Whether another control can be placed on it
    virtual bool isAcceptFocus() = 0; // Whether can be focused
    virtual bool isAcceptModal() = 0; // Whether can be modal
    virtual bool isWantTabs() = 0; // Whether uses tab key itself. By default false
    virtual bool isTabStop() = 0; // Whether can be focused by Tab and Shift+Tab
    virtual bool isDeactivateByTab() = 0; // Whether another control can be activated by Tab key if this control is active. Has no sence for modal state. For active non-modal state only. By default true
    virtual bool isModal() = 0; // Whether in modal state
    virtual bool isHovered() = 0; // Whether is under mouse pointer
    virtual bool isFocused() = 0; // Whether is focused
    virtual bool isVisible(const bool with_parents) = 0; // Whether is visible. If with_parents is true, then check all parents and return false if one of them is invisible
    virtual bool isEnabled(const bool with_parents) = 0; // Whether is enabled. If with_parents is true, then check all parents and return false if one of them is inactive
    virtual bool isCaptureMouse() = 0; // Whether the control is capturing mouse input
    virtual bool isCaptureKeyboard() = 0; // Whether the control is capturing keyboard input
    virtual bool isActive() = 0; // Whether is active
    virtual bool isShowHint() = 0; // Whether hint should be shown.
    virtual bool isFocusByMouse() = 0; // Whether it could be focused by mouse click on it. True by default. Work only if isAcceptFocus() is true. By default true
    virtual bool isUseParentStyle() = 0; // Whether parent or local style should be used. By default true
    virtual bool isUseParentFont() = 0; // Whether parent or local font should be used. By default true
    virtual bool isUseParentShowHint() = 0; // Whether parent or local hint visiblity settings should be used. By default true
    virtual bool isUseParentHintDelay() = 0; // Whether parent or local hint delay should be used. By default true
    virtual bool isUseParentHintShift() = 0; // Whether parent or local hint shift should be used. By default true
    virtual bool hasChild(IControl *control) = 0; // Check whether specified control is a child of this one in entire hierarchy of child controls
    // Since 4.0.0
    virtual Point getDPI() = 0; // Return DPI for which control parameters where adopted. { 96, 96 } by default
    // Since 6.0.0
    virtual bool isAcceptChild(IControl *control) = 0; // Return true if child could be placed onto this control
    // Since 9.0.0
    virtual bool isStaticTabOrder() = 0; // Return true if control and its children tab order should not be changed when adding it to a form. Should only return true if control is used as modal one or it will result in wrong switching between controls by Tab and Shift+Tab keys

    virtual bool setParent(IControl *value) = 0; // Set or remove parent
    virtual bool setStyle(IStyle *value) = 0; // Set style. It also change UseParentStyle to false
    virtual bool setFont(IFont *value, const bool copy = true) = 0; // Set font. It also change UseParentFont to false
    virtual bool setTransform(ITransform *value) = 0; // Set transform
    virtual bool setTransformControls(ITransform *value) = 0; // Set child controls transform
    virtual bool setAlign(const ALIGN value) = 0; // Set alignment
    virtual bool setConstraints(const RectF &value) = 0; // Set constraints
    virtual bool setMinConstraints(const PointF &value) = 0; // Set minimum allowed width and height
    virtual bool setMaxConstraints(const PointF &value) = 0; // Set maximum allowed width and height
    virtual bool setMinWidth(const float value) = 0; // Set minimum allowed width
    virtual bool setMinHeight(const float value) = 0; // Set minimum allowed height
    virtual bool setMaxWidth(const float value) = 0; // Set maximum allowed width
    virtual bool setMaxHeight(const float value) = 0; // Set maximum allowed width
    virtual bool setSize(const PointF &value) = 0; // Set width and height. Don't change alignment
    virtual bool setWidth(const float value) = 0; // Set width. Don't change alignment
    virtual bool setHeight(const float value) = 0; // Set height. Don't change alignment
    virtual bool setZIndex(const int value) = 0; // Set Z-index
    virtual bool setCursor(const CURSOR_TYPE value) = 0; // Set cursor
    virtual bool setTabOrder(const int value) = 0; // Set tab order
    virtual bool setHintText(const String &value) = 0; // Set hint text
    virtual bool setHintDelay(const float value) = 0; // Set hint appearance delay. Also change UseParentHintDelay to false
    virtual bool setHintShift(const PointF &value) = 0; // Set hint shift. Also change UseParentHintShift to false
    virtual bool setWantTabs(const bool value) = 0; // Set whether the control uses Tab key in its own matter and form shouldn't process it
    virtual bool setTabStop(const bool value) = 0; // Set whether control could be focused by Tab and Shift+Tab
    virtual bool setDeactivateByTab(const bool value) = 0; // Set whether modal control can be deactivated by Tab
    virtual bool setModal(const bool value) = 0; // Activate/deactivate modal state
    virtual bool setFocus() = 0; // Set focused
    virtual bool setVisible(const bool value) = 0; // Show and hide
    virtual bool setEnabled(const bool value) = 0; // Enable and disable
    virtual bool setShowHint(const bool value) = 0; // Set whether to show hint or not. Also changes UseParentShowHint to false
    virtual bool setUseParentStyle(const bool value) = 0; // Set which style to use, parent or own
    virtual bool setUseParentFont(const bool value) = 0; // Set which font to use, parent or own
    virtual bool setUseParentShowHint(const bool value) = 0; // Set which hint visibility settings to use, parent or own
    virtual bool setUseParentHintDelay(const bool value) = 0; // Set which hint appearance settings to use, parent or own
    virtual bool setUseParentHintShift(const bool value) = 0; // Set which hint shift settings to use, parent or own
    // Since 2.0.0
    virtual void setService(IControlService *value, const bool release_prev) = 0; // Set new service. Use only compatible services and avoid setting empty value
    // Since 4.0.0
    virtual bool setDPI(const Point &value) = 0; // Adopt control parameters for new DPI
    // Since 9.0.0
    virtual bool setStaticTabOrder(const bool value) = 0; // Set whether control and its children tab order should not be changed when adding it to a form. Should only be true if control is used as modal one or it will result in wrong switching between controls by Tab and Shift+Tab keys

    virtual bool AttachControl(IControl *control) = 0; // Add child control
    virtual bool InsertControl(IControl *control, const int before) = 0; // Insert child control before specified position
    virtual bool DeleteControl(const int index) = 0; // Delete child control by index. Child control will be destroyed as well
    virtual bool DeleteControl(IControl *control) = 0; // Delete specified child control. Child control will be destroyed as well
    virtual bool DeleteControls() = 0; // Delete and destroy all child controls
    virtual bool DetachControl(IControl *control) = 0; // Delete child control and don't destroy it
    virtual IControl *FindControl(const String &name, IControl *exclude = nullptr) = 0; // Find control in entire hierarchy by name

    virtual void Repaint(const bool repaint_children) = 0; // Repaint entire control area with calling or not Reapint for all child controls
    virtual void Repaint(const RectF &rect, const bool convert) = 0; // Repaint specified control part. Convert indicates whether specified part should be converted to form coordinates or it is already converted
    // Since 8.0.0
    virtual void Refresh(const bool refresh_children) = 0; // Clears internal canvas(drawing buffer). Do not call repaint authomatically

    virtual bool BringToFront() = 0; // Move the control to end of list or controls on a parent
    virtual bool BringUp() = 0; // Move the control to one position up in list or controls on parent
    virtual bool BringDown() = 0; // Move the control to one position down in list or controls on parent
    virtual bool BringBefore(IControl *control) = 0; // Move the control before specified one in list of controls on a parent
    virtual bool BringBefore(const int index) = 0; // Move the control before specified index in list of controls on a parent
    virtual bool BringAfter(IControl *control) = 0; // Move the control after specified one in list of controls on a parent
    virtual bool BringAfter(const int index) = 0; // Move the control after specified index in list of controls on a parent

    virtual IControlService *QueryService() = 0; // Return service

    virtual PointF FormToLocal(const PointF &pos) = 0; // Convert from form to local coordinates
    virtual PointF LocalToForm(const PointF &pos) = 0; // Convert from local to form coordinates

    // Hint actions(since 8.0.0)
    virtual bool ShowHint(const PointF &position) = 0; // Show control's hint. Position is in control coordinates
};
Namespace: nitisa
Include: Nitisa/Interfaces/IControl.h