Content


NTL
Core
IControl

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 MessageFocus &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 MessagePaint &m, bool &draw_children); // Event called at the beginning of the control painting
    void(*OnPaintEnd)(IControl *sender, const MessagePaint &m); // Event called at the end of the control painting

    // Keyboard input events
    void(*OnKeyDown)(IControl *sender, const MessageKey &m, bool &processed); // Event called when keyboard key has been down
    void(*OnKeyUp)(IControl *sender, const MessageKey &m, bool &processed); // Event called when keyboard key has been released
    void(*OnChar)(IControl *sender, const MessageChar &m, bool &processed); // Event called when character has been received from keyboard input
    void(*OnDeadChar)(IControl *sender, const MessageChar &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 MessagePosition &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 MessageMouse &m, bool &processed); // Event called when mouse pointer is moving
    void(*OnLeftMouseButtonDown)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when left mouse button has been down
    void(*OnLeftMouseButtonUp)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when left mouse button has been released
    void(*OnLeftMouseButtonDoubleClick)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when left mouse button has been double clicked
    void(*OnRightMouseButtonDown)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when right mouse button has been down
    void(*OnRightMouseButtonUp)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when right mouse button has been released
    void(*OnRightMouseButtonDoubleClick)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when right mouse button has been double clicked
    void(*OnMiddleMouseButtonDown)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when middle mouse button has been down
    void(*OnMiddleMouseButtonUp)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when middle mouse button has been released
    void(*OnMiddleMouseButtonDoubleClick)(IControl *sender, const MessageMouse &m, bool &processed); // Event called when middle mouse button has been double clicked
    void(*OnMouseVerticalWheel)(IControl *sender, const MessageMouseWheel &m, bool &processed); // Event called when mouse vertical wheel has been scrolled
    void(*OnMouseHorizontalWheel)(IControl *sender, const MessageMouseWheel &m, bool &processed); // Event called when mouse horizontal wheel has been scrolled

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

    // Clipboard events
    void(*OnPasteString)(IControl *sender, const MessagePasteString &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 Mat4f 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 CursorType 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 Point getDPI() = 0; // Return DPI for which control parameters where adopted. { 96, 96 } by default
    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 isAcceptChild(IControl *control) = 0; // Return true if child could be placed onto this control
    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 hasChild(IControl *control) = 0; // Check whether specified control is a child of this one in entire hierarchy of child controls
    virtual bool hasStyle() const = 0;
    virtual bool hasFont() const = 0;

    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 CursorType 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
    virtual void setService(IControlService *value, const bool release_prev) = 0; // Set new service. Use only compatible services and avoid setting empty value
    virtual bool setDPI(const Point &value) = 0; // Adopt control parameters for new DPI
    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

    // Control
    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

    // Paint
    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
    virtual void Refresh(const bool refresh_children) = 0; // Clears internal canvas(drawing buffer). Do not call repaint authomatically

    // Order
    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

    // Helpers
    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
    virtual bool ShowHint(const PointF &position) = 0; // Show control's hint. Position is in control coordinates
};
Namespace: nitisa
Include: Nitisa/Interfaces/IControl.h