CBuiltInDropDown



This class is an implementation of the Built-in DropDown control. You may check DropDown control source code in the Standard package to see how it may be used in your controls.

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

class CBuiltInDropDown :public virtual IBuiltInDropDown, public CBuiltInControl
{
public:
    enum class State // Possible states
    {
        Normal, // Common, normal state
        Hovered, // Control is hovered
        Focused, // Control is focused
        FocusedHovered, // Control is focused and hovered
        Disabled // Control is disabled
    };

    enum class ArrowArea // How open/close arrow area width should be calculated
    {
        Absolute, // Arrow area width is specified in pixels
        Height, // Arrow area width is equal to control height
        WidthPart // Arrow area width is specified in parts of control width
    };

    enum class OpenDirection // Where list with items should appear in opened dropdown
    {
        Up, // At the top of the control
        Down // At the bottom of the control
    };
public:
    IBuiltInControlListener *getListener() override;
    bool isHovered() override;
    RectF getClientRect() override;
    RectF getRenderRect() override;
    CursorType getCursor(const PointF &position, const CursorType def) override;
    bool isInside(const PointF &position) override;
    bool isDown() override;
    IBuiltInTextInput *getTextInput() override;

    void setListener(IBuiltInControlListener *value) override;
    bool setEnabled(const bool value) override;
    bool setFocused(const bool value) override;
    bool setSize(const PointF &value) override;
    bool setDPI(const Point &value) override;

    void UpdateFromStyle(IStyle *style, const String &class_name) override;
    void Update() override;
    void Render(const bool last_pass, const Mat4f &matrix, const Block *block) override;
    void Refresh() override;

    // State change notifications
    void NotifyOnAttach() override;
    void NotifyOnDeactivate() override;
    void NotifyOnFreeResources() override;

    // Mouse notifications
    bool NotifyOnMouseHover(const PointF &position) override;
    bool NotifyOnMouseLeave() override;
    bool NotifyOnMouseMove(const PointF &position, const bool left, const bool middle, const bool right, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseLeftDown(const PointF &position, const bool middle, const bool right, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseLeftUp(const PointF &position, const bool middle, const bool right, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseLeftDoubleClick(const PointF &position, const bool middle, const bool right, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseMiddleDown(const PointF &position, const bool left, const bool right, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseMiddleUp(const PointF &position, const bool left, const bool right, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseMiddleDoubleClick(const PointF &position, const bool left, const bool right, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseRightDown(const PointF &position, const bool left, const bool middle, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseRightUp(const PointF &position, const bool left, const bool middle, const bool ctrl, const bool alt, const bool shift) override;
    bool NotifyOnMouseRightDoubleClick(const PointF &position, const bool left, const bool middle, const bool ctrl, const bool alt, const bool shift) override;
    void NotifyOnMouseDownCancel() override;
    bool NotifyOnMouseVerticalWheel(const PointF &position, const bool left, const bool middle, const bool right, const bool ctrl, const bool alt, const bool shift, const int delta) override;
    bool NotifyOnMouseHorizontalWheel(const PointF &position, const bool left, const bool middle, const bool right, const bool ctrl, const bool alt, const bool shift, const int delta) override;

    // Keyboard notifications
    bool NotifyOnKeyDown(const Key key, const bool ctrl, const bool alt, const bool shift, const bool numlock) override;
    bool NotifyOnKeyUp(const Key key, const bool ctrl, const bool alt, const bool shift, const bool numlock) override;
    bool NotifyOnChar(const wchar_t chr, const bool ctrl, const bool alt, const bool shift, const bool numlock) override;
    bool NotifyOnDeadChar(const wchar_t chr, const bool ctrl, const bool alt, const bool shift, const bool numlock) override;

    // Other input notifications
    bool NotifyOnDropFiles(const PointF &position, const StringArray &filenames) override;

    // Clipboard notifications
    bool NotifyOnPasteString(const String &text) override;

    int getItemCount() override;
    IListItem *getItem(const int index) override;
    int getItemIndex(IListItem *item) override;
    bool isEditable() override;
    bool isOpened() override;
    bool isSortable() override;
    String getText() override;
    int getActiveIndex() override;
    FCompare getCompareFunc() override;
    FGetItemText getItemTextFunc() override;
    FSearch getSearchFunc() override;
    PointF getMousePosition() override; // Suppose dropdown is only translated. If it's transformed in other way, overwrite the method

    bool setTextInput(IBuiltInTextInput *value) override;
    bool setScroll(IBuiltInScroll *value) override;
    bool setEditable(const bool value) override;
    bool setSortable(const bool value) override;
    bool setText(const String &value) override;
    bool setActiveIndex(const int value) override;
    bool setCompareFunc(FCompare value) override;
    bool setGetItemTextFunc(FGetItemText value) override;
    bool setSearchFunc(FSearch value) override;

    bool AddItem(IListItem *item) override;
    bool InsertItem(IListItem *item, const int before) override;
    bool DeleteItem(const int index) override;
    bool DeleteItem(IListItem *item) override;
    bool DeleteItems() override;
    bool MoveItem(IListItem *item, const int before) override;

    bool Open() override;
    bool Close() override;
    IListItemOwner *QueryListItemOwner() override;

    /**
    Constructor
    @param editable Whether dropdown will have text input
    @param compare Item comparison function
    @param get_item_text Function returning item caption or name
    @param search Searching function
    */
    CBuiltInDropDown(const bool editable, FCompare compare, FGetItemText get_item_text, FSearch search);
    ~CBuiltInDropDown();

    virtual State getState(); // Return current state
    bool isArrowAtRight() const; // Return whether arrow area at the right of the control
    OpenDirection getOpenDirection() const; // Return where list of items will be shown when opening the dropdown
    ArrowArea getArrowArea() const; // Return how arrow area is calculated
    float getListWidth() const; // Return width of item list
    float getListMaxHeight() const; // Return maximum height of item list
    float getArrowAreaSize() const; // Return parameter of calculating arrow area width
    float getArrowSize() const; // Return arrow area size
    RectF getBorderWidth() const; // Return border widths
    RectF getBorderRadius() const; // Return border radiuses
    RectF getPadding() const; // Return padding
    RectF getArrowBorderWidth() const; // Return arrow area border widths
    RectF getArrowBorderRadius() const; // Return arrow area corner radiuses
    RectF getListBorderWidth() const; // Return item list border widths
    RectF getListBorderRadius() const; // Return item list corner radiuses
    RectF getListPadding() const; // Return item list padding
    Color getShadowColor(const State state) const; // Return shadow color depending on state in non-editable mode
    Color getShadowColorEditable(const State state) const; // Return shadow color depending on state in editable mode
    PointF getShadowShift(const State state) const; // Return shadow shift depending on state in non-editable mode
    PointF getShadowShiftEditable(const State state) const; // Return shadow shift depending on state in editable mode
    int getShadowRadius(const State state) const; // Return shadow blur radius depending on state in non-editable mode
    int getShadowRadiusEditable(const State state) const; // Return shadow blur radius depending on state in editable mode
    BorderColor getBorderColor(const State state) const; // Return border colours depending on state in non-editable mode
    BorderColor getBorderColorEditable(const State state) const; // Return border colours depending on state in editable mode
    Color getLeftBorderColor(const State state) const; // Return left border colour depending on state in non-editable mode
    Color getLeftBorderColorEditable(const State state) const; // Return left border colour depending on state in editable mode
    Color getTopBorderColor(const State state) const; // Return top border colour depending on state in non-editable mode
    Color getTopBorderColorEditable(const State state) const; // Return top border colour depending on state in editable mode
    Color getRightBorderColor(const State state) const; // Return right border colour depending on state in non-editable mode
    Color getRightBorderColorEditable(const State state) const; // Return right border colour depending on state in editable mode
    Color getBottomBorderColor(const State state) const; // Return bottom border colour depending on state in non-editable mode
    Color getBottomBorderColorEditable(const State state) const; // Return bottom border colour depending on state in editable mode
    Color getBackgroundColor(const State state) const; // Return background colour depending on state in non-editable mode
    Color getBackgroundColorEditable(const State state) const; // Return background colour depending on state in editable mode
    Gradient *getBackgroundGradient(const State state); // Return background gradient depending on state in non-editable mode
    Gradient *getBackgroundGradientEditable(const State state); // Return background gradient depending on state in editable mode
    BorderColor getArrowBorderColor(const State state) const; // Return arrow area border colours depending on state in non-editable mode
    BorderColor getArrowBorderColorEditable(const State state) const; // Return arrow area border colours depending on state in editable mode
    Color getArrowLeftBorderColor(const State state) const; // Return arrow area left border colour depending on state in non-editable mode
    Color getArrowLeftBorderColorEditable(const State state) const; // Return arrow area left border colour depending on state in editable mode
    Color getArrowTopBorderColor(const State state) const; // Return arrow area top border colour depending on state in non-editable mode
    Color getArrowTopBorderColorEditable(const State state) const; // Return arrow area top border colour depending on state in editable mode
    Color getArrowRightBorderColor(const State state) const; // Return arrow area right border colour depending on state in non-editable mode
    Color getArrowRightBorderColorEditable(const State state) const; // Return arrow area right border colour depending on state in editable mode
    Color getArrowBottomBorderColor(const State state) const; // Return arrow area bottom border colour depending on state in non-editable mode
    Color getArrowBottomBorderColorEditable(const State state) const; // Return arrow area bottom border colour depending on state in editable mode
    Color getArrowBackgroundColor(const State state) const; // Return arrow area background colour depending on state in non-editable mode
    Color getArrowBackgroundColorEditable(const State state) const; // Return arrow area background colour depending on state in editable mode
    Gradient *getArrowBackgroundGradient(const State state); // Return arrow area background gradient depending on state in non-editable mode
    Gradient *getArrowBackgroundGradientEditable(const State state); // Return arrow area background gradient depending on state in editable mode
    Color getArrowColor(const State state) const; // Return arrow colour depending on state in non-editable mode
    Color getArrowColorEditable(const State state) const; // Return arrow colour depending on state in editable mode
    BorderColor getListBorderColor() const; // Return list border colours in non-editable mode
    BorderColor getListBorderColorEditable() const; // Return list border colours in editable mode
    Color getListLeftBorderColor() const; // Return list left border colour in non-editable mode
    Color getListLeftBorderColorEditable() const; // Return list left border colour in editable mode
    Color getListTopBorderColor() const; // Return list top border colour in non-editable mode
    Color getListTopBorderColorEditable() const; // Return list top border colour in editable mode
    Color getListRightBorderColor() const; // Return list right border colour in non-editable mode
    Color getListRightBorderColorEditable() const; // Return list right border colour in editable mode
    Color getListBottomBorderColor() const; // Return list bottom border colour in non-editable mode
    Color getListBottomBorderColorEditable() const; // Return list bottom border colour in editable mode
    Color getListBackgroundColor() const; // Return list background colour in non-editable mode
    Color getListBackgroundColorEditable() const; // Return list background colour in editable mode
    Gradient *getListBackgroundGradient(); // Return list background gradient in non-editable mode
    Gradient *getListBackgroundGradientEditable(); // Return list background gradient in editable mode
    Color getListShadowColor() const; // Return list shadow colour in non-editable mode
    Color getListShadowColorEditable() const; // Return list shadow colour in editable mode
    PointF getListShadowShift() const; // Return list shadow shift in non-editable mode
    PointF getListShadowShiftEditable() const; // Return list shadow shift in editable mode
    int getListShadowRadius() const; // Return list shadow blur radius in non-editable mode
    int getListShadowRadiusEditable() const; // Return list shadow blur radius in editable mode
    float getSearchResetInterval() const; // Return reset search interval in seconds

    bool setArrowAtRight(const bool value); // Set whether arrow area should be at right of the control
    bool setOpenDirection(const OpenDirection value); // Set where to show item list
    bool setListWidth(const float value); // Set item list width
    bool setListMaxHeight(const float value); // Set item list maximum height
    bool setArrowArea(const ArrowArea value);  // Set arrow area width calculation type
    bool setArrowAreaSize(const float value); // Set arrow area calculation parameter
    bool setArrowSize(const float value); // Set arrow size
    bool setBorderWidth(const RectF &value); // Set border widths
    bool setBorderRadius(const RectF &value); // Set corner radiuses
    bool setPadding(const RectF &value); // Set padding
    bool setArrowBorderWidth(const RectF &value); // Set arrow area border widths
    bool setArrowBorderRadius(const RectF &value); // Set arrow area corner radiuses
    bool setListBorderWidth(const RectF &value); // Set item list border widths
    bool setListBorderRadius(const RectF &value); // Set item list corner radiuses
    bool setListPadding(const RectF &value); // Set item list padding
    bool setShadowColor(const State state, const Color &value); // Set shadow colour depending on state in non-editable mode
    bool setShadowColorEditable(const State state, const Color &value); // Set shadow colour depending on state in editable mode
    bool setShadowShift(const State state, const PointF &value); // Set shadow shift depending on state in non-editable mode
    bool setShadowShiftEditable(const State state, const PointF &value); // Set shadow shift depending on state in editable mode
    bool setShadowRadius(const State state, const int value); // Set shadow blur radius depending on state in non-editable mode
    bool setShadowRadiusEditable(const State state, const int value); // Set shadow blur radius depending on state in editable mode
    bool setBorderColor(const State state, const BorderColor &value); // Set border colours depending on state in non-editable mode
    bool setBorderColorEditable(const State state, const BorderColor &value); // Set border colours depending on state in editable mode
    bool setLeftBorderColor(const State state, const Color &value); // Set left border colour depending on state in non-editable mode
    bool setLeftBorderColorEditable(const State state, const Color &value); // Set left border colour depending on state in editable mode
    bool setTopBorderColor(const State state, const Color &value); // Set top border colour depending on state in non-editable mode
    bool setTopBorderColorEditable(const State state, const Color &value); // Set top border colour depending on state in editable mode
    bool setRightBorderColor(const State state, const Color &value); // Set right border colour depending on state in non-editable mode
    bool setRightBorderColorEditable(const State state, const Color &value); // Set right border colour depending on state in editable mode
    bool setBottomBorderColor(const State state, const Color &value); // Set bottom border colour depending on state in non-editable mode
    bool setBottomBorderColorEditable(const State state, const Color &value); // Set bottom border colour depending on state in editable mode
    bool setBackgroundColor(const State state, const Color &value); // Set background colour depending on state in non-editable mode
    bool setBackgroundColorEditable(const State state, const Color &value); // Set background colour depending on state in editable mode
    bool setArrowBorderColor(const State state, const BorderColor &value); // Set arrow area border colours depending on state in non-editable mode
    bool setArrowBorderColorEditable(const State state, const BorderColor &value); // Set arrow area border colours depending on state in editable mode
    bool setArrowLeftBorderColor(const State state, const Color &value); // Set arrow area left border colour depending on state in non-editable mode
    bool setArrowLeftBorderColorEditable(const State state, const Color &value); // Set arrow area left border colour depending on state in editable mode
    bool setArrowTopBorderColor(const State state, const Color &value); // Set arrow area top border colour depending on state in non-editable mode
    bool setArrowTopBorderColorEditable(const State state, const Color &value); // Set arrow area top border colour depending on state in editable mode
    bool setArrowRightBorderColor(const State state, const Color &value); // Set arrow area right border colour depending on state in non-editable mode
    bool setArrowRightBorderColorEditable(const State state, const Color &value); // Set arrow area right border colour depending on state in editable mode
    bool setArrowBottomBorderColor(const State state, const Color &value); // Set arrow area bottom border colour depending on state in non-editable mode
    bool setArrowBottomBorderColorEditable(const State state, const Color &value); // Set arrow area bottom border colour depending on state in editable mode
    bool setArrowBackgroundColor(const State state, const Color &value); // Set arrow area background colour depending on state in non-editable mode
    bool setArrowBackgroundColorEditable(const State state, const Color &value); // Set arrow area background colour depending on state in editable mode
    bool setArrowColor(const State state, const Color &value); // Set arrow colour depending on state in non-editable mode
    bool setArrowColorEditable(const State state, const Color &value); // Set arrow colour depending on state in editable mode
    bool setListBorderColor(const BorderColor &value); // Set item list border colours in non-editable mode
    bool setListBorderColorEditable(const BorderColor &value); // Set item list border colours in editable mode
    bool setListLeftBorderColor(const Color &value); // Set item list left border colour in non-editable mode
    bool setListLeftBorderColorEditable(const Color &value); // Set item list left border colour in editable mode
    bool setListTopBorderColor(const Color &value); // Set item list top border colour in non-editable mode
    bool setListTopBorderColorEditable(const Color &value); // Set item list top border colour in editable mode
    bool setListRightBorderColor(const Color &value); // Set item list right border colour in non-editable mode
    bool setListRightBorderColorEditable(const Color &value); // Set item list right border colour in editable mode
    bool setListBottomBorderColor(const Color &value); // Set item list bottom border colour in non-editable mode
    bool setListBottomBorderColorEditable(const Color &value); // Set item list bottom border colour in editable mode
    bool setListBackgroundColor(const Color &value); // Set item list background colour in non-editable mode
    bool setListBackgroundColorEditable(const Color &value); // Set item list background colour in editable mode
    bool setListShadowColor(const Color &value); // Set item list shadow colour in non-editable mode
    bool setListShadowColorEditable(const Color &value); // Set item list shadow colour in editable mode
    bool setListShadowShift(const PointF &value); // Set item list shadow shift in non-editable mode
    bool setListShadowShiftEditable(const PointF &value); // Set item list shadow shift in editable mode
    bool setListShadowRadius(const int value); // Set item list shadow blur radius in non-editable mode
    bool setListShadowRadiusEditable(const int value); // Set item list shadow blur radius in editable mode
    bool setSearchResetInterval(const float value); // Set reset search interval(in seconds)
};
Namespace: nitisa
Include: Nitisa/BuiltInControls/DropDown/BuiltInDropDown.h