1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /*
- * ComboBox.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #pragma once
- #include "../gui/InterfaceObjectConfigurable.h"
- #include "Buttons.h"
- class ComboBox : public CButton
- {
- class DropDown : public InterfaceObjectConfigurable
- {
- struct Item : public InterfaceObjectConfigurable
- {
- DropDown & dropDown;
- const void * item = nullptr;
-
- Item(const JsonNode &, ComboBox::DropDown &, Point position);
- void updateItem(int index, const void * item = nullptr);
-
- void hover(bool on) override;
- void clickPressed(const Point & cursorPosition) override;
- void clickReleased(const Point & cursorPosition) override;
- };
-
- friend struct Item;
-
- public:
- DropDown(const JsonNode &, ComboBox &, Point dropDownPosition);
-
- bool receiveEvent(const Point & position, int eventType) const override;
- void clickPressed(const Point & cursorPosition) override;
- void setItem(const void *);
- void updateListItems();
-
- private:
- std::shared_ptr<DropDown::Item> buildItem(const JsonNode & config);
-
- void sliderMove(int slidPos);
-
- ComboBox & comboBox;
- std::vector<std::shared_ptr<Item>> items;
- std::vector<const void *> curItems;
- };
-
- friend class DropDown;
- public:
- ComboBox(Point position, const AnimationPath & defName, const std::pair<std::string, std::string> & help, const JsonNode & dropDownDescriptor, Point dropDownPosition, EShortcut key = {}, bool playerColoredButton = false);
-
- //define this callback to fill input vector with data for the combo box
- std::function<void(std::vector<const void *> &)> onConstructItems;
-
- //callback is called when item is selected and its value can be used
- std::function<void(const void *)> onSetItem;
-
- //return text value from item data
- std::function<std::string(int, const void *)> getItemText;
-
- void setItem(int id);
- void setItem(const void *);
- void updateListItems();
- };
|