item_list.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #ifndef ITEMLIST_H
  2. #define ITEMLIST_H
  3. #include "scene/gui/control.h"
  4. #include "scene/gui/scroll_bar.h"
  5. class ItemList : public Control {
  6. OBJ_TYPE( ItemList, Control );
  7. public:
  8. enum IconMode {
  9. ICON_MODE_TOP,
  10. ICON_MODE_LEFT
  11. };
  12. enum SelectMode {
  13. SELECT_SINGLE,
  14. SELECT_MULTI
  15. };
  16. private:
  17. struct Item {
  18. Ref<Texture> icon;
  19. Ref<Texture> tag_icon;
  20. String text;
  21. bool selectable;
  22. bool selected;
  23. bool disabled;
  24. Variant metadata;
  25. String tooltip;
  26. Color custom_bg;
  27. Rect2 rect_cache;
  28. bool operator<(const Item& p_another) const { return text<p_another.text; }
  29. };
  30. int current;
  31. bool shape_changed;
  32. bool ensure_selected_visible;
  33. Vector<Item> items;
  34. Vector<int> separators;
  35. SelectMode select_mode;
  36. IconMode icon_mode;
  37. VScrollBar *scroll_bar;
  38. uint64_t search_time_msec;
  39. String search_string;
  40. int current_columns;
  41. int fixed_column_width;
  42. int max_text_lines;
  43. int max_columns;
  44. Size2 min_icon_size;
  45. int defer_select_single;
  46. void _scroll_changed(double);
  47. void _input_event(const InputEvent& p_event);
  48. protected:
  49. void _notification(int p_what);
  50. static void _bind_methods();
  51. public:
  52. void add_item(const String& p_item,const Ref<Texture>& p_texture=Ref<Texture>(),bool p_selectable=true);
  53. void add_icon_item(const Ref<Texture>& p_item,bool p_selectable=true);
  54. void set_item_text(int p_idx,const String& p_text);
  55. String get_item_text(int p_idx) const;
  56. void set_item_icon(int p_idx,const Ref<Texture>& p_icon);
  57. Ref<Texture> get_item_icon(int p_idx) const;
  58. void set_item_selectable(int p_idx,bool p_selectable);
  59. bool is_item_selectable(int p_idx) const;
  60. void set_item_disabled(int p_idx,bool p_disabled);
  61. bool is_item_disabled(int p_idx) const;
  62. void set_item_metadata(int p_idx,const Variant& p_metadata);
  63. Variant get_item_metadata(int p_idx) const;
  64. void set_item_tag_icon(int p_idx,const Ref<Texture>& p_tag_icon);
  65. Ref<Texture> get_item_tag_icon(int p_idx) const;
  66. void set_item_tooltip(int p_idx,const String& p_tooltip);
  67. String get_item_tooltip(int p_idx) const;
  68. void set_item_custom_bg_color(int p_idx,const Color& p_custom_bg_color);
  69. Color get_item_custom_bg_color(int p_idx) const;
  70. void select(int p_idx,bool p_single=true);
  71. void unselect(int p_idx);
  72. bool is_selected(int p_idx) const;
  73. void set_current(int p_current);
  74. int get_current() const;
  75. void move_item(int p_item,int p_to_pos);
  76. int get_item_count() const;
  77. void remove_item(int p_idx);
  78. void clear();
  79. void set_fixed_column_width(int p_size);
  80. int get_fixed_column_width() const;
  81. void set_max_text_lines(int p_amount);
  82. int get_max_text_lines() const;
  83. void set_max_columns(int p_amount);
  84. int get_max_columns() const;
  85. void set_select_mode(SelectMode p_mode);
  86. SelectMode get_select_mode() const;
  87. void set_icon_mode(IconMode p_mode);
  88. IconMode get_icon_mode() const;
  89. void set_min_icon_size(const Size2& p_size);
  90. Size2 get_min_icon_size() const;
  91. void ensure_current_is_visible();
  92. void sort_items_by_text();
  93. int find_metadata(const Variant& p_metadata) const;
  94. virtual String get_tooltip(const Point2& p_pos) const;
  95. ItemList();
  96. ~ItemList();
  97. };
  98. VARIANT_ENUM_CAST(ItemList::SelectMode);
  99. VARIANT_ENUM_CAST(ItemList::IconMode);
  100. #endif // ITEMLIST_H