diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2017-03-05 16:44:50 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2017-03-05 16:44:50 +0100 |
commit | 5dbf1809c6e3e905b94b8764e99491e608122261 (patch) | |
tree | 5e5a5360db15d86d59ec8c6e4f7eb511388c5a9a /scene/gui/item_list.cpp | |
parent | 45438e9918d421b244bfd7776a30e67dc7f2d3e3 (diff) |
A Whole New World (clang-format edition)
I can show you the code
Pretty, with proper whitespace
Tell me, coder, now when did
You last write readable code?
I can open your eyes
Make you see your bad indent
Force you to respect the style
The core devs agreed upon
A whole new world
A new fantastic code format
A de facto standard
With some sugar
Enforced with clang-format
A whole new world
A dazzling style we all dreamed of
And when we read it through
It's crystal clear
That now we're in a whole new world of code
Diffstat (limited to 'scene/gui/item_list.cpp')
-rw-r--r-- | scene/gui/item_list.cpp | 1094 |
1 files changed, 505 insertions, 589 deletions
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index 91bd16ee0b..1db748a6b1 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -27,264 +27,235 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "item_list.h" -#include "os/os.h" #include "global_config.h" +#include "os/os.h" - -void ItemList::add_item(const String& p_item,const Ref<Texture>& p_texture,bool p_selectable) { +void ItemList::add_item(const String &p_item, const Ref<Texture> &p_texture, bool p_selectable) { Item item; - item.icon=p_texture; - item.icon_region=Rect2i(); - item.text=p_item; - item.selectable=p_selectable; - item.selected=false; - item.disabled=false; - item.tooltip_enabled=true; - item.custom_bg=Color(0,0,0,0); + item.icon = p_texture; + item.icon_region = Rect2i(); + item.text = p_item; + item.selectable = p_selectable; + item.selected = false; + item.disabled = false; + item.tooltip_enabled = true; + item.custom_bg = Color(0, 0, 0, 0); items.push_back(item); update(); - shape_changed=true; - + shape_changed = true; } -void ItemList::add_icon_item(const Ref<Texture>& p_item,bool p_selectable){ +void ItemList::add_icon_item(const Ref<Texture> &p_item, bool p_selectable) { Item item; - item.icon=p_item; - item.icon_region=Rect2i(); + item.icon = p_item; + item.icon_region = Rect2i(); //item.text=p_item; - item.selectable=p_selectable; - item.selected=false; - item.disabled=false; - item.tooltip_enabled=true; - item.custom_bg=Color(0,0,0,0); + item.selectable = p_selectable; + item.selected = false; + item.disabled = false; + item.tooltip_enabled = true; + item.custom_bg = Color(0, 0, 0, 0); items.push_back(item); update(); - shape_changed=true; - + shape_changed = true; } -void ItemList::set_item_text(int p_idx,const String& p_text){ +void ItemList::set_item_text(int p_idx, const String &p_text) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - items[p_idx].text=p_text; + items[p_idx].text = p_text; update(); - shape_changed=true; - + shape_changed = true; } -String ItemList::get_item_text(int p_idx) const{ +String ItemList::get_item_text(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),String()); + ERR_FAIL_INDEX_V(p_idx, items.size(), String()); return items[p_idx].text; - } void ItemList::set_item_tooltip_enabled(int p_idx, const bool p_enabled) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); items[p_idx].tooltip_enabled = p_enabled; } bool ItemList::is_item_tooltip_enabled(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(), false); + ERR_FAIL_INDEX_V(p_idx, items.size(), false); return items[p_idx].tooltip_enabled; } -void ItemList::set_item_tooltip(int p_idx,const String& p_tooltip){ +void ItemList::set_item_tooltip(int p_idx, const String &p_tooltip) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - items[p_idx].tooltip=p_tooltip; + items[p_idx].tooltip = p_tooltip; update(); - shape_changed=true; - + shape_changed = true; } -String ItemList::get_item_tooltip(int p_idx) const{ +String ItemList::get_item_tooltip(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),String()); + ERR_FAIL_INDEX_V(p_idx, items.size(), String()); return items[p_idx].tooltip; - } -void ItemList::set_item_icon(int p_idx,const Ref<Texture>& p_icon){ +void ItemList::set_item_icon(int p_idx, const Ref<Texture> &p_icon) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - items[p_idx].icon=p_icon; + items[p_idx].icon = p_icon; update(); - shape_changed=true; - - + shape_changed = true; } -Ref<Texture> ItemList::get_item_icon(int p_idx) const{ +Ref<Texture> ItemList::get_item_icon(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),Ref<Texture>()); + ERR_FAIL_INDEX_V(p_idx, items.size(), Ref<Texture>()); return items[p_idx].icon; - } -void ItemList::set_item_icon_region(int p_idx,const Rect2& p_region) { +void ItemList::set_item_icon_region(int p_idx, const Rect2 &p_region) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - items[p_idx].icon_region=p_region; + items[p_idx].icon_region = p_region; update(); - shape_changed=true; + shape_changed = true; } Rect2 ItemList::get_item_icon_region(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),Rect2()); + ERR_FAIL_INDEX_V(p_idx, items.size(), Rect2()); return items[p_idx].icon_region; } -void ItemList::set_item_custom_bg_color(int p_idx,const Color& p_custom_bg_color) { - - ERR_FAIL_INDEX(p_idx,items.size()); +void ItemList::set_item_custom_bg_color(int p_idx, const Color &p_custom_bg_color) { - items[p_idx].custom_bg=p_custom_bg_color; + ERR_FAIL_INDEX(p_idx, items.size()); + items[p_idx].custom_bg = p_custom_bg_color; } Color ItemList::get_item_custom_bg_color(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),Color()); + ERR_FAIL_INDEX_V(p_idx, items.size(), Color()); return items[p_idx].custom_bg; - } +void ItemList::set_item_tag_icon(int p_idx, const Ref<Texture> &p_tag_icon) { + ERR_FAIL_INDEX(p_idx, items.size()); -void ItemList::set_item_tag_icon(int p_idx,const Ref<Texture>& p_tag_icon){ - - ERR_FAIL_INDEX(p_idx,items.size()); - - items[p_idx].tag_icon=p_tag_icon; + items[p_idx].tag_icon = p_tag_icon; update(); - shape_changed=true; - - + shape_changed = true; } -Ref<Texture> ItemList::get_item_tag_icon(int p_idx) const{ +Ref<Texture> ItemList::get_item_tag_icon(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),Ref<Texture>()); + ERR_FAIL_INDEX_V(p_idx, items.size(), Ref<Texture>()); return items[p_idx].tag_icon; - } -void ItemList::set_item_selectable(int p_idx,bool p_selectable){ - - ERR_FAIL_INDEX(p_idx,items.size()); - - items[p_idx].selectable=p_selectable; +void ItemList::set_item_selectable(int p_idx, bool p_selectable) { + ERR_FAIL_INDEX(p_idx, items.size()); + items[p_idx].selectable = p_selectable; } +bool ItemList::is_item_selectable(int p_idx) const { -bool ItemList::is_item_selectable(int p_idx) const{ - - ERR_FAIL_INDEX_V(p_idx,items.size(),false); + ERR_FAIL_INDEX_V(p_idx, items.size(), false); return items[p_idx].selectable; } -void ItemList::set_item_disabled(int p_idx,bool p_disabled){ +void ItemList::set_item_disabled(int p_idx, bool p_disabled) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - items[p_idx].disabled=p_disabled; + items[p_idx].disabled = p_disabled; update(); - } +bool ItemList::is_item_disabled(int p_idx) const { -bool ItemList::is_item_disabled(int p_idx) const{ - - ERR_FAIL_INDEX_V(p_idx,items.size(),false); + ERR_FAIL_INDEX_V(p_idx, items.size(), false); return items[p_idx].disabled; } +void ItemList::set_item_metadata(int p_idx, const Variant &p_metadata) { -void ItemList::set_item_metadata(int p_idx,const Variant& p_metadata){ - - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - items[p_idx].metadata=p_metadata; + items[p_idx].metadata = p_metadata; update(); - shape_changed=true; - + shape_changed = true; } -Variant ItemList::get_item_metadata(int p_idx) const{ +Variant ItemList::get_item_metadata(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),Variant()); + ERR_FAIL_INDEX_V(p_idx, items.size(), Variant()); return items[p_idx].metadata; - } -void ItemList::select(int p_idx,bool p_single){ +void ItemList::select(int p_idx, bool p_single) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - if (p_single || select_mode==SELECT_SINGLE) { + if (p_single || select_mode == SELECT_SINGLE) { if (!items[p_idx].selectable || items[p_idx].disabled) { return; } - for(int i=0;i<items.size();i++) { - items[i].selected=p_idx==i; + for (int i = 0; i < items.size(); i++) { + items[i].selected = p_idx == i; } - current=p_idx; - ensure_selected_visible=false; + current = p_idx; + ensure_selected_visible = false; } else { if (items[p_idx].selectable && !items[p_idx].disabled) { - items[p_idx].selected=true; + items[p_idx].selected = true; } } update(); - - } -void ItemList::unselect(int p_idx){ +void ItemList::unselect(int p_idx) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); - if (select_mode!=SELECT_MULTI) { - items[p_idx].selected=false; - current=-1; + if (select_mode != SELECT_MULTI) { + items[p_idx].selected = false; + current = -1; } else { - items[p_idx].selected=false; + items[p_idx].selected = false; } update(); - } -bool ItemList::is_selected(int p_idx) const{ +bool ItemList::is_selected(int p_idx) const { - ERR_FAIL_INDEX_V(p_idx,items.size(),false); + ERR_FAIL_INDEX_V(p_idx, items.size(), false); return items[p_idx].selected; - } void ItemList::set_current(int p_current) { - ERR_FAIL_INDEX(p_current,items.size()); + ERR_FAIL_INDEX(p_current, items.size()); - if (select_mode==SELECT_SINGLE) - select(p_current,true); + if (select_mode == SELECT_SINGLE) + select(p_current, true); else { - current=p_current; + current = p_current; update(); } } @@ -294,117 +265,110 @@ int ItemList::get_current() const { return current; } -void ItemList::move_item(int p_item,int p_to_pos) { +void ItemList::move_item(int p_item, int p_to_pos) { - ERR_FAIL_INDEX(p_item,items.size()); - ERR_FAIL_INDEX(p_to_pos,items.size()+1); + ERR_FAIL_INDEX(p_item, items.size()); + ERR_FAIL_INDEX(p_to_pos, items.size() + 1); - Item it=items[p_item]; + Item it = items[p_item]; items.remove(p_item); - if (p_to_pos>p_item) { + if (p_to_pos > p_item) { p_to_pos--; } - if (p_to_pos>=items.size()) { + if (p_to_pos >= items.size()) { items.push_back(it); } else { - items.insert(p_to_pos,it); + items.insert(p_to_pos, it); } - if (current<0) { + if (current < 0) { //do none - } else if (p_item==current) { - current=p_to_pos; - } else if (p_to_pos>p_item && current>p_item && current<p_to_pos) { + } else if (p_item == current) { + current = p_to_pos; + } else if (p_to_pos > p_item && current > p_item && current < p_to_pos) { current--; - } else if (p_to_pos<p_item && current<p_item && current>p_to_pos) { + } else if (p_to_pos < p_item && current < p_item && current > p_to_pos) { current++; } - update(); } -int ItemList::get_item_count() const{ +int ItemList::get_item_count() const { return items.size(); } -void ItemList::remove_item(int p_idx){ +void ItemList::remove_item(int p_idx) { - ERR_FAIL_INDEX(p_idx,items.size()); + ERR_FAIL_INDEX(p_idx, items.size()); items.remove(p_idx); update(); - shape_changed=true; - defer_select_single=-1; - - + shape_changed = true; + defer_select_single = -1; } -void ItemList::clear(){ +void ItemList::clear() { items.clear(); - current=-1; - ensure_selected_visible=false; + current = -1; + ensure_selected_visible = false; update(); - shape_changed=true; - defer_select_single=-1; - + shape_changed = true; + defer_select_single = -1; } -void ItemList::set_fixed_column_width(int p_size){ +void ItemList::set_fixed_column_width(int p_size) { - ERR_FAIL_COND(p_size<0); - fixed_column_width=p_size; + ERR_FAIL_COND(p_size < 0); + fixed_column_width = p_size; update(); - shape_changed=true; - + shape_changed = true; } -int ItemList::get_fixed_column_width() const{ +int ItemList::get_fixed_column_width() const { return fixed_column_width; } -void ItemList::set_same_column_width(bool p_enable){ +void ItemList::set_same_column_width(bool p_enable) { - same_column_width=p_enable; + same_column_width = p_enable; update(); - shape_changed=true; - + shape_changed = true; } -int ItemList::is_same_column_width() const{ +int ItemList::is_same_column_width() const { return same_column_width; } -void ItemList::set_max_text_lines(int p_lines){ +void ItemList::set_max_text_lines(int p_lines) { - ERR_FAIL_COND(p_lines<1); - max_text_lines=p_lines; + ERR_FAIL_COND(p_lines < 1); + max_text_lines = p_lines; update(); - shape_changed=true; - + shape_changed = true; } -int ItemList::get_max_text_lines() const{ +int ItemList::get_max_text_lines() const { return max_text_lines; } -void ItemList::set_max_columns(int p_amount){ +void ItemList::set_max_columns(int p_amount) { - ERR_FAIL_COND(p_amount<0); - max_columns=p_amount; + ERR_FAIL_COND(p_amount < 0); + max_columns = p_amount; update(); } -int ItemList::get_max_columns() const{ +int ItemList::get_max_columns() const { return max_columns; } void ItemList::set_select_mode(SelectMode p_mode) { - select_mode=p_mode; + select_mode = p_mode; update(); } @@ -413,22 +377,20 @@ ItemList::SelectMode ItemList::get_select_mode() const { return select_mode; } -void ItemList::set_icon_mode(IconMode p_mode){ +void ItemList::set_icon_mode(IconMode p_mode) { - icon_mode=p_mode; + icon_mode = p_mode; update(); - shape_changed=true; - + shape_changed = true; } -ItemList::IconMode ItemList::get_icon_mode() const{ +ItemList::IconMode ItemList::get_icon_mode() const { return icon_mode; } +void ItemList::set_fixed_icon_size(const Size2 &p_size) { -void ItemList::set_fixed_icon_size(const Size2& p_size) { - - fixed_icon_size=p_size; + fixed_icon_size = p_size; update(); } @@ -446,151 +408,142 @@ Size2 ItemList::Item::get_icon_size() const { return icon_region.size; } -void ItemList::_gui_input(const InputEvent& p_event) { +void ItemList::_gui_input(const InputEvent &p_event) { - if (defer_select_single>=0 && p_event.type==InputEvent::MOUSE_MOTION) { - defer_select_single=-1; + if (defer_select_single >= 0 && p_event.type == InputEvent::MOUSE_MOTION) { + defer_select_single = -1; return; } - if (defer_select_single>=0 && p_event.type==InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index==BUTTON_LEFT && !p_event.mouse_button.pressed) { - - select(defer_select_single,true); + if (defer_select_single >= 0 && p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index == BUTTON_LEFT && !p_event.mouse_button.pressed) { + select(defer_select_single, true); - emit_signal("multi_selected",defer_select_single,true); - defer_select_single=-1; + emit_signal("multi_selected", defer_select_single, true); + defer_select_single = -1; return; } - if (p_event.type==InputEvent::MOUSE_BUTTON && (p_event.mouse_button.button_index==BUTTON_LEFT || (allow_rmb_select && p_event.mouse_button.button_index==BUTTON_RIGHT)) && p_event.mouse_button.pressed) { + if (p_event.type == InputEvent::MOUSE_BUTTON && (p_event.mouse_button.button_index == BUTTON_LEFT || (allow_rmb_select && p_event.mouse_button.button_index == BUTTON_RIGHT)) && p_event.mouse_button.pressed) { const InputEventMouseButton &mb = p_event.mouse_button; - search_string=""; //any mousepress cancels - Vector2 pos(mb.x,mb.y); + search_string = ""; //any mousepress cancels + Vector2 pos(mb.x, mb.y); Ref<StyleBox> bg = get_stylebox("bg"); - pos-=bg->get_offset(); - pos.y+=scroll_bar->get_value(); + pos -= bg->get_offset(); + pos.y += scroll_bar->get_value(); int closest = -1; - for(int i=0;i<items.size();i++) { + for (int i = 0; i < items.size(); i++) { Rect2 rc = items[i].rect_cache; - if (i%current_columns==current_columns-1) { - rc.size.width=get_size().width; //not right but works + if (i % current_columns == current_columns - 1) { + rc.size.width = get_size().width; //not right but works } if (rc.has_point(pos)) { - closest=i; + closest = i; break; } } - if (closest!=-1) { + if (closest != -1) { int i = closest; - if (select_mode==SELECT_MULTI && items[i].selected && mb.mod.command) { + if (select_mode == SELECT_MULTI && items[i].selected && mb.mod.command) { unselect(i); - emit_signal("multi_selected",i,false); + emit_signal("multi_selected", i, false); - } else if (select_mode==SELECT_MULTI && mb.mod.shift && current>=0 && current<items.size() && current!=i) { + } else if (select_mode == SELECT_MULTI && mb.mod.shift && current >= 0 && current < items.size() && current != i) { int from = current; int to = i; - if (i<current) { - SWAP(from,to); + if (i < current) { + SWAP(from, to); } - for(int j=from;j<=to;j++) { + for (int j = from; j <= to; j++) { bool selected = !items[j].selected; - select(j,false); + select(j, false); if (selected) - emit_signal("multi_selected",i,true); + emit_signal("multi_selected", i, true); } - if (p_event.mouse_button.button_index==BUTTON_RIGHT) { + if (p_event.mouse_button.button_index == BUTTON_RIGHT) { - emit_signal("item_rmb_selected",i,Vector2(mb.x,mb.y)); + emit_signal("item_rmb_selected", i, Vector2(mb.x, mb.y)); } } else { - if (!mb.doubleclick && !mb.mod.command && select_mode==SELECT_MULTI && items[i].selectable && !items[i].disabled && items[i].selected && p_event.mouse_button.button_index==BUTTON_LEFT) { - defer_select_single=i; + if (!mb.doubleclick && !mb.mod.command && select_mode == SELECT_MULTI && items[i].selectable && !items[i].disabled && items[i].selected && p_event.mouse_button.button_index == BUTTON_LEFT) { + defer_select_single = i; return; } - if (items[i].selected && p_event.mouse_button.button_index==BUTTON_RIGHT) { + if (items[i].selected && p_event.mouse_button.button_index == BUTTON_RIGHT) { - emit_signal("item_rmb_selected",i,Vector2(mb.x,mb.y)); + emit_signal("item_rmb_selected", i, Vector2(mb.x, mb.y)); } else { bool selected = !items[i].selected; - - select(i,select_mode==SELECT_SINGLE || !mb.mod.command); + select(i, select_mode == SELECT_SINGLE || !mb.mod.command); if (selected) { - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",i); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", i); } else - emit_signal("multi_selected",i,true); - - + emit_signal("multi_selected", i, true); } - if (p_event.mouse_button.button_index==BUTTON_RIGHT) { + if (p_event.mouse_button.button_index == BUTTON_RIGHT) { - emit_signal("item_rmb_selected",i,Vector2(mb.x,mb.y)); + emit_signal("item_rmb_selected", i, Vector2(mb.x, mb.y)); } else if (/*select_mode==SELECT_SINGLE &&*/ mb.doubleclick) { - emit_signal("item_activated",i); - + emit_signal("item_activated", i); } } } - return; } else { Vector<int> sItems = get_selected_items(); - for(int i = 0; i < sItems.size(); i++) { + for (int i = 0; i < sItems.size(); i++) { unselect(sItems[i]); } } } - if (p_event.type==InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index==BUTTON_WHEEL_UP && p_event.mouse_button.pressed) { - - scroll_bar->set_value( scroll_bar->get_value()-scroll_bar->get_page()/8 ); + if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index == BUTTON_WHEEL_UP && p_event.mouse_button.pressed) { + scroll_bar->set_value(scroll_bar->get_value() - scroll_bar->get_page() / 8); } - if (p_event.type==InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index==BUTTON_WHEEL_DOWN && p_event.mouse_button.pressed) { - - scroll_bar->set_value( scroll_bar->get_value()+scroll_bar->get_page()/8 ); + if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index == BUTTON_WHEEL_DOWN && p_event.mouse_button.pressed) { + scroll_bar->set_value(scroll_bar->get_value() + scroll_bar->get_page() / 8); } - if (p_event.is_pressed() && items.size()>0) { + if (p_event.is_pressed() && items.size() > 0) { if (p_event.is_action("ui_up")) { - if (search_string!="") { + if (search_string != "") { uint64_t now = OS::get_singleton()->get_ticks_msec(); - uint64_t diff = now-search_time_msec; + uint64_t diff = now - search_time_msec; - if (diff<int(GlobalConfig::get_singleton()->get("gui/timers/incremental_search_max_interval_msec"))*2) { + if (diff < int(GlobalConfig::get_singleton()->get("gui/timers/incremental_search_max_interval_msec")) * 2) { - for(int i=current-1;i>=0;i--) { + for (int i = current - 1; i >= 0; i--) { if (items[i].text.begins_with(search_string)) { set_current(i); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } - break; } } @@ -599,31 +552,31 @@ void ItemList::_gui_input(const InputEvent& p_event) { } } - if (current>=current_columns) { - set_current(current-current_columns); + if (current >= current_columns) { + set_current(current - current_columns); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } accept_event(); } } else if (p_event.is_action("ui_down")) { - if (search_string!="") { + if (search_string != "") { uint64_t now = OS::get_singleton()->get_ticks_msec(); - uint64_t diff = now-search_time_msec; + uint64_t diff = now - search_time_msec; - if (diff<int(GlobalConfig::get_singleton()->get("gui/timers/incremental_search_max_interval_msec"))*2) { + if (diff < int(GlobalConfig::get_singleton()->get("gui/timers/incremental_search_max_interval_msec")) * 2) { - for(int i=current+1;i<items.size();i++) { + for (int i = current + 1; i < items.size(); i++) { if (items[i].text.begins_with(search_string)) { set_current(i); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } break; } @@ -633,25 +586,24 @@ void ItemList::_gui_input(const InputEvent& p_event) { } } - if (current<items.size()-current_columns) { - set_current(current+current_columns); + if (current < items.size() - current_columns) { + set_current(current + current_columns); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } accept_event(); - } } else if (p_event.is_action("ui_page_up")) { - search_string=""; //any mousepress cancels + search_string = ""; //any mousepress cancels - for(int i=4;i>0;i--) { - if (current-current_columns*i >=0 ) { - set_current( current- current_columns*i); + for (int i = 4; i > 0; i--) { + if (current - current_columns * i >= 0) { + set_current(current - current_columns * i); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } accept_event(); break; @@ -659,14 +611,14 @@ void ItemList::_gui_input(const InputEvent& p_event) { } } else if (p_event.is_action("ui_page_down")) { - search_string=""; //any mousepress cancels + search_string = ""; //any mousepress cancels - for(int i=4;i>0;i--) { - if (current+current_columns*i < items.size() ) { - set_current( current+ current_columns*i); + for (int i = 4; i > 0; i--) { + if (current + current_columns * i < items.size()) { + set_current(current + current_columns * i); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } accept_event(); @@ -675,146 +627,134 @@ void ItemList::_gui_input(const InputEvent& p_event) { } } else if (p_event.is_action("ui_left")) { - search_string=""; //any mousepress cancels + search_string = ""; //any mousepress cancels - if (current%current_columns!=0) { - set_current(current-1); + if (current % current_columns != 0) { + set_current(current - 1); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } accept_event(); - } } else if (p_event.is_action("ui_right")) { - search_string=""; //any mousepress cancels + search_string = ""; //any mousepress cancels - if (current%current_columns!=(current_columns-1)) { - set_current(current+1); + if (current % current_columns != (current_columns - 1)) { + set_current(current + 1); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } accept_event(); - } } else if (p_event.is_action("ui_cancel")) { - search_string=""; + search_string = ""; } else if (p_event.is_action("ui_select")) { - - if (select_mode==SELECT_MULTI && current>=0 && current<items.size()) { + if (select_mode == SELECT_MULTI && current >= 0 && current < items.size()) { if (items[current].selectable && !items[current].disabled && !items[current].selected) { - select(current,false); - emit_signal("multi_selected",current,true); + select(current, false); + emit_signal("multi_selected", current, true); } else if (items[current].selected) { unselect(current); - emit_signal("multi_selected",current,false); + emit_signal("multi_selected", current, false); } } } else if (p_event.is_action("ui_accept")) { - search_string=""; //any mousepress cance + search_string = ""; //any mousepress cance - if (current>=0 && current<items.size()) { - emit_signal("item_activated",current); + if (current >= 0 && current < items.size()) { + emit_signal("item_activated", current); } - } else if (p_event.type==InputEvent::KEY) { + } else if (p_event.type == InputEvent::KEY) { if (p_event.key.unicode) { uint64_t now = OS::get_singleton()->get_ticks_msec(); - uint64_t diff = now-search_time_msec; - uint64_t max_interval = uint64_t(GLOBAL_DEF("gui/timers/incremental_search_max_interval_msec",2000)); + uint64_t diff = now - search_time_msec; + uint64_t max_interval = uint64_t(GLOBAL_DEF("gui/timers/incremental_search_max_interval_msec", 2000)); search_time_msec = now; - if (diff>max_interval) { - search_string=""; + if (diff > max_interval) { + search_string = ""; } - search_string+=String::chr(p_event.key.unicode); - for(int i=0;i<items.size();i++) { + search_string += String::chr(p_event.key.unicode); + for (int i = 0; i < items.size(); i++) { if (items[i].text.begins_with(search_string)) { set_current(i); ensure_current_is_visible(); - if (select_mode==SELECT_SINGLE) { - emit_signal("item_selected",current); + if (select_mode == SELECT_SINGLE) { + emit_signal("item_selected", current); } break; } } - } - } } - - - - } void ItemList::ensure_current_is_visible() { - ensure_selected_visible=true; + ensure_selected_visible = true; update(); } static Rect2 _adjust_to_max_size(Size2 p_size, Size2 p_max_size) { - Size2 size=p_max_size; + Size2 size = p_max_size; int tex_width = p_size.width * size.height / p_size.height; int tex_height = size.height; - if (tex_width>size.width) { - tex_width=size.width; - tex_height=p_size.height * tex_width / p_size.width; + if (tex_width > size.width) { + tex_width = size.width; + tex_height = p_size.height * tex_width / p_size.width; } - int ofs_x=(size.width - tex_width)/2; - int ofs_y=(size.height - tex_height)/2; - - return Rect2(ofs_x,ofs_y,tex_width,tex_height); - + int ofs_x = (size.width - tex_width) / 2; + int ofs_y = (size.height - tex_height) / 2; + return Rect2(ofs_x, ofs_y, tex_width, tex_height); } void ItemList::_notification(int p_what) { - if (p_what==NOTIFICATION_RESIZED) { - shape_changed=true; + if (p_what == NOTIFICATION_RESIZED) { + shape_changed = true; update(); } - if (p_what==NOTIFICATION_DRAW) { + if (p_what == NOTIFICATION_DRAW) { Ref<StyleBox> bg = get_stylebox("bg"); int mw = scroll_bar->get_minimum_size().x; - scroll_bar->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,mw+bg->get_margin(MARGIN_RIGHT)); - scroll_bar->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,bg->get_margin(MARGIN_RIGHT)); - scroll_bar->set_anchor_and_margin(MARGIN_TOP,ANCHOR_BEGIN,bg->get_margin(MARGIN_TOP)); - scroll_bar->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,bg->get_margin(MARGIN_BOTTOM)); - + scroll_bar->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, mw + bg->get_margin(MARGIN_RIGHT)); + scroll_bar->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, bg->get_margin(MARGIN_RIGHT)); + scroll_bar->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, bg->get_margin(MARGIN_TOP)); + scroll_bar->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, bg->get_margin(MARGIN_BOTTOM)); Size2 size = get_size(); - float page = size.height-bg->get_minimum_size().height; - int width = size.width-bg->get_minimum_size().width; - if (scroll_bar->is_visible()){ - width-=mw+bg->get_margin(MARGIN_RIGHT); + float page = size.height - bg->get_minimum_size().height; + int width = size.width - bg->get_minimum_size().width; + if (scroll_bar->is_visible()) { + width -= mw + bg->get_margin(MARGIN_RIGHT); } scroll_bar->set_page(page); - draw_style_box(bg,Rect2(Point2(),size)); + draw_style_box(bg, Rect2(Point2(), size)); int hseparation = get_constant("hseparation"); int vseparation = get_constant("vseparation"); int icon_margin = get_constant("icon_margin"); int line_separation = get_constant("line_separation"); - Ref<StyleBox> sbsel = has_focus()?get_stylebox("selected_focus"):get_stylebox("selected"); - Ref<StyleBox> cursor = has_focus()?get_stylebox("cursor"):get_stylebox("cursor_unfocused"); + Ref<StyleBox> sbsel = has_focus() ? get_stylebox("selected_focus") : get_stylebox("selected"); + Ref<StyleBox> cursor = has_focus() ? get_stylebox("cursor") : get_stylebox("cursor_unfocused"); Ref<Font> font = get_font("font"); Color guide_color = get_color("guide_color"); @@ -830,9 +770,9 @@ void ItemList::_notification(int p_what) { } if (has_focus()) { - VisualServer::get_singleton()->canvas_item_add_clip_ignore(get_canvas_item(),true); - draw_style_box(get_stylebox("bg_focus"),Rect2(Point2(),size)); - VisualServer::get_singleton()->canvas_item_add_clip_ignore(get_canvas_item(),false); + VisualServer::get_singleton()->canvas_item_add_clip_ignore(get_canvas_item(), true); + draw_style_box(get_stylebox("bg_focus"), Rect2(Point2(), size)); + VisualServer::get_singleton()->canvas_item_add_clip_ignore(get_canvas_item(), false); } if (shape_changed) { @@ -840,114 +780,109 @@ void ItemList::_notification(int p_what) { float max_column_width = 0; //1- compute item minimum sizes - for(int i=0;i<items.size();i++) { + for (int i = 0; i < items.size(); i++) { Size2 minsize; if (items[i].icon.is_valid()) { - if (fixed_icon_size.x>0 && fixed_icon_size.y>0) { - minsize=fixed_icon_size* icon_scale; + if (fixed_icon_size.x > 0 && fixed_icon_size.y > 0) { + minsize = fixed_icon_size * icon_scale; } else { - minsize=items[i].get_icon_size() *icon_scale; + minsize = items[i].get_icon_size() * icon_scale; } - if (items[i].text!="") { - if (icon_mode==ICON_MODE_TOP) { - minsize.y+=icon_margin; + if (items[i].text != "") { + if (icon_mode == ICON_MODE_TOP) { + minsize.y += icon_margin; } else { - minsize.x+=icon_margin; + minsize.x += icon_margin; } } } - if (items[i].text!="") { + if (items[i].text != "") { Size2 s = font->get_string_size(items[i].text); //s.width=MIN(s.width,fixed_column_width); - - - if (icon_mode==ICON_MODE_TOP) { - minsize.x=MAX(minsize.x,s.width); - if (max_text_lines>0) { - minsize.y+=(font_height+line_separation)*max_text_lines; + if (icon_mode == ICON_MODE_TOP) { + minsize.x = MAX(minsize.x, s.width); + if (max_text_lines > 0) { + minsize.y += (font_height + line_separation) * max_text_lines; } else { - minsize.y+=s.height; + minsize.y += s.height; } } else { - minsize.y=MAX(minsize.y,s.height); - minsize.x+=s.width; + minsize.y = MAX(minsize.y, s.height); + minsize.x += s.width; } } - - if (fixed_column_width>0) - minsize.x=fixed_column_width; - max_column_width=MAX(max_column_width,minsize.x); - items[i].rect_cache.size=minsize; - items[i].min_rect_cache.size=minsize; - + if (fixed_column_width > 0) + minsize.x = fixed_column_width; + max_column_width = MAX(max_column_width, minsize.x); + items[i].rect_cache.size = minsize; + items[i].min_rect_cache.size = minsize; } int fit_size = size.x - bg->get_minimum_size().width - mw; //2-attempt best fit current_columns = 0x7FFFFFFF; - if (max_columns>0) - current_columns=max_columns; + if (max_columns > 0) + current_columns = max_columns; - - while(true) { + while (true) { //repeat util all fits //print_line("try with "+itos(current_columns)); - bool all_fit=true; + bool all_fit = true; Vector2 ofs; - int col=0; - int max_h=0; + int col = 0; + int max_h = 0; separators.clear(); - for(int i=0;i<items.size();i++) { + for (int i = 0; i < items.size(); i++) { - if (current_columns>1 && items[i].rect_cache.size.width+ofs.x > fit_size) { + if (current_columns > 1 && items[i].rect_cache.size.width + ofs.x > fit_size) { //went past - current_columns=MAX(col,1); - all_fit=false; + current_columns = MAX(col, 1); + all_fit = false; break; } - items[i].rect_cache=items[i].min_rect_cache; - if(same_column_width) - items[i].rect_cache.size.x=max_column_width; - items[i].rect_cache.pos=ofs; - max_h=MAX(max_h,items[i].rect_cache.size.y); - ofs.x+=items[i].rect_cache.size.x + hseparation; + items[i].rect_cache = items[i].min_rect_cache; + if (same_column_width) + items[i].rect_cache.size.x = max_column_width; + items[i].rect_cache.pos = ofs; + max_h = MAX(max_h, items[i].rect_cache.size.y); + ofs.x += items[i].rect_cache.size.x + hseparation; //print_line("item "+itos(i)+" ofs "+rtos(items[i].rect_cache.size.x)); col++; - if (col==current_columns) { + if (col == current_columns) { - if (i<items.size()-1) - separators.push_back(ofs.y+max_h+vseparation/2); + if (i < items.size() - 1) + separators.push_back(ofs.y + max_h + vseparation / 2); - for(int j=i;j>=0 && col>0;j--, col--) { + for (int j = i; j >= 0 && col > 0; j--, col--) { items[j].rect_cache.size.y = max_h; } - ofs.x=0; - ofs.y+=max_h+vseparation; - col=0; - max_h=0; + ofs.x = 0; + ofs.y += max_h + vseparation; + col = 0; + max_h = 0; } } - for(int j=items.size()-1;j>=0 && col>0;j--, col--) { + for (int j = items.size() - 1; j >= 0 && col > 0; j--, col--) { items[j].rect_cache.size.y = max_h; } if (all_fit) { - float max = MAX(page,ofs.y+max_h); + float max = MAX(page, ofs.y + max_h); scroll_bar->set_max(max); //print_line("max: "+rtos(max)+" page "+rtos(page)); - if (max<=page) { + if (max <= page) { scroll_bar->set_value(0); scroll_bar->hide(); } else { @@ -957,12 +892,11 @@ void ItemList::_notification(int p_what) { } } - - shape_changed=false; + shape_changed = false; } //ensure_selected_visible needs to be checked before we draw the list. - if (ensure_selected_visible && current>=0 && current <=items.size()) { + if (ensure_selected_visible && current >= 0 && current <= items.size()) { Rect2 r = items[current].rect_cache; int from = scroll_bar->get_value(); @@ -970,200 +904,188 @@ void ItemList::_notification(int p_what) { if (r.pos.y < from) { scroll_bar->set_value(r.pos.y); - } else if (r.pos.y+r.size.y > to) { - scroll_bar->set_value(r.pos.y+r.size.y - (to-from)); + } else if (r.pos.y + r.size.y > to) { + scroll_bar->set_value(r.pos.y + r.size.y - (to - from)); } - - } - ensure_selected_visible=false; + ensure_selected_visible = false; Vector2 base_ofs = bg->get_offset(); - base_ofs.y-=int(scroll_bar->get_value()); - - Rect2 clip(Point2(),size-bg->get_minimum_size()+Vector2(0,scroll_bar->get_value())); + base_ofs.y -= int(scroll_bar->get_value()); - for(int i=0;i<items.size();i++) { + Rect2 clip(Point2(), size - bg->get_minimum_size() + Vector2(0, scroll_bar->get_value())); + for (int i = 0; i < items.size(); i++) { Rect2 rcache = items[i].rect_cache; if (!clip.intersects(rcache)) continue; - - if (current_columns==1) { - rcache.size.width = width-rcache.pos.x; + if (current_columns == 1) { + rcache.size.width = width - rcache.pos.x; } - Rect2 r=rcache; - r.pos+=base_ofs; + Rect2 r = rcache; + r.pos += base_ofs; // Use stylebox to dimension potential bg color, even if not selected - r.pos.x-=sbsel->get_margin(MARGIN_LEFT); - r.size.x+=sbsel->get_margin(MARGIN_LEFT)+sbsel->get_margin(MARGIN_RIGHT); - r.pos.y-=sbsel->get_margin(MARGIN_TOP); - r.size.y+=sbsel->get_margin(MARGIN_TOP)+sbsel->get_margin(MARGIN_BOTTOM); + r.pos.x -= sbsel->get_margin(MARGIN_LEFT); + r.size.x += sbsel->get_margin(MARGIN_LEFT) + sbsel->get_margin(MARGIN_RIGHT); + r.pos.y -= sbsel->get_margin(MARGIN_TOP); + r.size.y += sbsel->get_margin(MARGIN_TOP) + sbsel->get_margin(MARGIN_BOTTOM); if (items[i].selected) { - draw_style_box(sbsel,r); + draw_style_box(sbsel, r); } - if (items[i].custom_bg.a>0.001) { - r.pos.x+=2; - r.size.x-=4; - r.pos.y+=2; - r.size.y-=4; - draw_rect(r,items[i].custom_bg); + if (items[i].custom_bg.a > 0.001) { + r.pos.x += 2; + r.size.x -= 4; + r.pos.y += 2; + r.size.y -= 4; + draw_rect(r, items[i].custom_bg); } - Vector2 text_ofs; if (items[i].icon.is_valid()) { Size2 icon_size; //= _adjust_to_max_size(items[i].get_icon_size(),fixed_icon_size) * icon_scale; - if (fixed_icon_size.x>0 && fixed_icon_size.y>0) { - icon_size=fixed_icon_size* icon_scale; + if (fixed_icon_size.x > 0 && fixed_icon_size.y > 0) { + icon_size = fixed_icon_size * icon_scale; } else { - icon_size=items[i].get_icon_size() *icon_scale; - + icon_size = items[i].get_icon_size() * icon_scale; } Vector2 icon_ofs; Point2 pos = items[i].rect_cache.pos + icon_ofs + base_ofs; - if (icon_mode==ICON_MODE_TOP) { + if (icon_mode == ICON_MODE_TOP) { - pos.x += Math::floor((items[i].rect_cache.size.width - icon_size.width)/2); + pos.x += Math::floor((items[i].rect_cache.size.width - icon_size.width) / 2); pos.y += MIN( - Math::floor((items[i].rect_cache.size.height - icon_size.height)/2), - items[i].rect_cache.size.height - items[i].min_rect_cache.size.height - ); + Math::floor((items[i].rect_cache.size.height - icon_size.height) / 2), + items[i].rect_cache.size.height - items[i].min_rect_cache.size.height); text_ofs.y = icon_size.height + icon_margin; text_ofs.y += items[i].rect_cache.size.height - items[i].min_rect_cache.size.height; } else { - pos.y += Math::floor((items[i].rect_cache.size.height - icon_size.height)/2); + pos.y += Math::floor((items[i].rect_cache.size.height - icon_size.height) / 2); text_ofs.x = icon_size.width + icon_margin; } - Rect2 draw_rect=Rect2(pos,icon_size); + Rect2 draw_rect = Rect2(pos, icon_size); - if (fixed_icon_size.x>0 && fixed_icon_size.y>0) { - Rect2 adj = _adjust_to_max_size(items[i].get_icon_size() * icon_scale,icon_size); - draw_rect.pos+=adj.pos; - draw_rect.size=adj.size; + if (fixed_icon_size.x > 0 && fixed_icon_size.y > 0) { + Rect2 adj = _adjust_to_max_size(items[i].get_icon_size() * icon_scale, icon_size); + draw_rect.pos += adj.pos; + draw_rect.size = adj.size; } - Color modulate=Color(1,1,1,1); + Color modulate = Color(1, 1, 1, 1); if (items[i].disabled) - modulate.a*=0.5; + modulate.a *= 0.5; if (items[i].icon_region.has_no_area()) - draw_texture_rect(items[i].icon, draw_rect,false,modulate ); + draw_texture_rect(items[i].icon, draw_rect, false, modulate); else - draw_texture_rect_region(items[i].icon, draw_rect, items[i].icon_region,modulate); - + draw_texture_rect_region(items[i].icon, draw_rect, items[i].icon_region, modulate); } if (items[i].tag_icon.is_valid()) { - draw_texture(items[i].tag_icon,items[i].rect_cache.pos+base_ofs); + draw_texture(items[i].tag_icon, items[i].rect_cache.pos + base_ofs); } - if (items[i].text!="") { + if (items[i].text != "") { - int max_len=-1; + int max_len = -1; Vector2 size = font->get_string_size(items[i].text); if (fixed_column_width) - max_len=fixed_column_width; - else if(same_column_width) - max_len=items[i].rect_cache.size.x; + max_len = fixed_column_width; + else if (same_column_width) + max_len = items[i].rect_cache.size.x; else - max_len=size.x; + max_len = size.x; - Color modulate=items[i].selected?font_color_selected:font_color; + Color modulate = items[i].selected ? font_color_selected : font_color; if (items[i].disabled) - modulate.a*=0.5; + modulate.a *= 0.5; - if (icon_mode==ICON_MODE_TOP && max_text_lines>0) { + if (icon_mode == ICON_MODE_TOP && max_text_lines > 0) { int ss = items[i].text.length(); - float ofs=0; - int line=0; - for(int j=0;j<=ss;j++) { - - int cs = j<ss?font->get_char_size(items[i].text[j],items[i].text[j+1]).x:0; - if (ofs+cs>max_len || j==ss) { - line_limit_cache[line]=j; - line_size_cache[line]=ofs; + float ofs = 0; + int line = 0; + for (int j = 0; j <= ss; j++) { + + int cs = j < ss ? font->get_char_size(items[i].text[j], items[i].text[j + 1]).x : 0; + if (ofs + cs > max_len || j == ss) { + line_limit_cache[line] = j; + line_size_cache[line] = ofs; line++; - ofs=0; - if (line>=max_text_lines) + ofs = 0; + if (line >= max_text_lines) break; } else { - ofs+=cs; + ofs += cs; } - } - line=0; - ofs=0; + line = 0; + ofs = 0; - text_ofs.y+=font->get_ascent(); - text_ofs=text_ofs.floor(); - text_ofs+=base_ofs; - text_ofs+=items[i].rect_cache.pos; + text_ofs.y += font->get_ascent(); + text_ofs = text_ofs.floor(); + text_ofs += base_ofs; + text_ofs += items[i].rect_cache.pos; - for(int j=0;j<ss;j++) { + for (int j = 0; j < ss; j++) { - if (j==line_limit_cache[line]) { + if (j == line_limit_cache[line]) { line++; - ofs=0; - if (line>=max_text_lines) + ofs = 0; + if (line >= max_text_lines) break; } - ofs+=font->draw_char(get_canvas_item(),text_ofs+Vector2(ofs+(max_len-line_size_cache[line])/2,line*(font_height+line_separation)).floor(),items[i].text[j],items[i].text[j+1],modulate); + ofs += font->draw_char(get_canvas_item(), text_ofs + Vector2(ofs + (max_len - line_size_cache[line]) / 2, line * (font_height + line_separation)).floor(), items[i].text[j], items[i].text[j + 1], modulate); } //special multiline mode } else { - if (fixed_column_width>0) - size.x=MIN(size.x,fixed_column_width); + if (fixed_column_width > 0) + size.x = MIN(size.x, fixed_column_width); - if (icon_mode==ICON_MODE_TOP) { - text_ofs.x+=(items[i].rect_cache.size.width-size.x)/2; + if (icon_mode == ICON_MODE_TOP) { + text_ofs.x += (items[i].rect_cache.size.width - size.x) / 2; } else { - text_ofs.y+=(items[i].rect_cache.size.height-size.y)/2; + text_ofs.y += (items[i].rect_cache.size.height - size.y) / 2; } - text_ofs.y+=font->get_ascent(); - text_ofs=text_ofs.floor(); - text_ofs+=base_ofs; - text_ofs+=items[i].rect_cache.pos; + text_ofs.y += font->get_ascent(); + text_ofs = text_ofs.floor(); + text_ofs += base_ofs; + text_ofs += items[i].rect_cache.pos; - draw_string(font,text_ofs,items[i].text,modulate,max_len+1); + draw_string(font, text_ofs, items[i].text, modulate, max_len + 1); } - - } - if (select_mode==SELECT_MULTI && i==current) { - - Rect2 r=rcache; - r.pos+=base_ofs; - draw_style_box(cursor,r); + if (select_mode == SELECT_MULTI && i == current) { + Rect2 r = rcache; + r.pos += base_ofs; + draw_style_box(cursor, r); } } - for(int i=0;i<separators.size();i++) { - draw_line(Vector2(bg->get_margin(MARGIN_LEFT),base_ofs.y+separators[i]),Vector2(size.width-bg->get_margin(MARGIN_LEFT),base_ofs.y+separators[i]),guide_color); + for (int i = 0; i < separators.size(); i++) { + draw_line(Vector2(bg->get_margin(MARGIN_LEFT), base_ofs.y + separators[i]), Vector2(size.width - bg->get_margin(MARGIN_LEFT), base_ofs.y + separators[i]), guide_color); } } } @@ -1172,66 +1094,64 @@ void ItemList::_scroll_changed(double) { update(); } -int ItemList::get_item_at_pos(const Point2& p_pos, bool p_exact) const { +int ItemList::get_item_at_pos(const Point2 &p_pos, bool p_exact) const { - Vector2 pos=p_pos; + Vector2 pos = p_pos; Ref<StyleBox> bg = get_stylebox("bg"); - pos-=bg->get_offset(); - pos.y+=scroll_bar->get_value(); + pos -= bg->get_offset(); + pos.y += scroll_bar->get_value(); int closest = -1; - int closest_dist=0x7FFFFFFF; + int closest_dist = 0x7FFFFFFF; - for(int i=0;i<items.size();i++) { + for (int i = 0; i < items.size(); i++) { Rect2 rc = items[i].rect_cache; - if (i%current_columns==current_columns-1) { - rc.size.width=get_size().width; //not right but works + if (i % current_columns == current_columns - 1) { + rc.size.width = get_size().width; //not right but works } if (rc.has_point(pos)) { - closest=i; + closest = i; break; } float dist = rc.distance_to(pos); - if (!p_exact && dist<closest_dist) { - closest=i; - closest_dist=dist; + if (!p_exact && dist < closest_dist) { + closest = i; + closest_dist = dist; } } return closest; } -bool ItemList::is_pos_at_end_of_items(const Point2& p_pos) const { +bool ItemList::is_pos_at_end_of_items(const Point2 &p_pos) const { if (items.empty()) return true; - Vector2 pos=p_pos; + Vector2 pos = p_pos; Ref<StyleBox> bg = get_stylebox("bg"); - pos-=bg->get_offset(); - pos.y+=scroll_bar->get_value(); + pos -= bg->get_offset(); + pos.y += scroll_bar->get_value(); - Rect2 endrect = items[items.size()-1].rect_cache; + Rect2 endrect = items[items.size() - 1].rect_cache; return (pos.y > endrect.pos.y + endrect.size.y); - } - -String ItemList::get_tooltip(const Point2& p_pos) const { +String ItemList::get_tooltip(const Point2 &p_pos) const { int closest = get_item_at_pos(p_pos); - if (closest!=-1) { + if (closest != -1) { if (!items[closest].tooltip_enabled) { return ""; } - if (items[closest].tooltip!="") { + if (items[closest].tooltip != "") { return items[closest].tooltip; } - if (items[closest].text!="") { + if (items[closest].text != "") { return items[closest].text; } } @@ -1243,10 +1163,10 @@ void ItemList::sort_items_by_text() { items.sort(); update(); - shape_changed=true; + shape_changed = true; - if (select_mode==SELECT_SINGLE) { - for(int i=0;i<items.size();i++) { + if (select_mode == SELECT_SINGLE) { + for (int i = 0; i < items.size(); i++) { if (items[i].selected) { select(i); return; @@ -1255,21 +1175,19 @@ void ItemList::sort_items_by_text() { } } -int ItemList::find_metadata(const Variant& p_metadata) const { +int ItemList::find_metadata(const Variant &p_metadata) const { - for(int i=0;i<items.size();i++) { - if (items[i].metadata==p_metadata) { + for (int i = 0; i < items.size(); i++) { + if (items[i].metadata == p_metadata) { return i; } } return -1; - } - void ItemList::set_allow_rmb_select(bool p_allow) { - allow_rmb_select=p_allow; + allow_rmb_select = p_allow; } bool ItemList::get_allow_rmb_select() const { @@ -1298,128 +1216,126 @@ Vector<int> ItemList::get_selected_items() { return selected; } -void ItemList::_bind_methods(){ +void ItemList::_bind_methods() { - ClassDB::bind_method(D_METHOD("add_item","text","icon:Texture","selectable"),&ItemList::add_item,DEFVAL(Variant()),DEFVAL(true)); - ClassDB::bind_method(D_METHOD("add_icon_item","icon:Texture","selectable"),&ItemList::add_icon_item,DEFVAL(true)); + ClassDB::bind_method(D_METHOD("add_item", "text", "icon:Texture", "selectable"), &ItemList::add_item, DEFVAL(Variant()), DEFVAL(true)); + ClassDB::bind_method(D_METHOD("add_icon_item", "icon:Texture", "selectable"), &ItemList::add_icon_item, DEFVAL(true)); - ClassDB::bind_method(D_METHOD("set_item_text","idx","text"),&ItemList::set_item_text); - ClassDB::bind_method(D_METHOD("get_item_text","idx"),&ItemList::get_item_text); + ClassDB::bind_method(D_METHOD("set_item_text", "idx", "text"), &ItemList::set_item_text); + ClassDB::bind_method(D_METHOD("get_item_text", "idx"), &ItemList::get_item_text); - ClassDB::bind_method(D_METHOD("set_item_icon","idx","icon:Texture"),&ItemList::set_item_icon); - ClassDB::bind_method(D_METHOD("get_item_icon:Texture","idx"),&ItemList::get_item_icon); + ClassDB::bind_method(D_METHOD("set_item_icon", "idx", "icon:Texture"), &ItemList::set_item_icon); + ClassDB::bind_method(D_METHOD("get_item_icon:Texture", "idx"), &ItemList::get_item_icon); - ClassDB::bind_method(D_METHOD("set_item_icon_region","idx","rect"),&ItemList::set_item_icon_region); - ClassDB::bind_method(D_METHOD("get_item_icon_region","idx"),&ItemList::get_item_icon_region); + ClassDB::bind_method(D_METHOD("set_item_icon_region", "idx", "rect"), &ItemList::set_item_icon_region); + ClassDB::bind_method(D_METHOD("get_item_icon_region", "idx"), &ItemList::get_item_icon_region); - ClassDB::bind_method(D_METHOD("set_item_selectable","idx","selectable"),&ItemList::set_item_selectable); - ClassDB::bind_method(D_METHOD("is_item_selectable","idx"),&ItemList::is_item_selectable); + ClassDB::bind_method(D_METHOD("set_item_selectable", "idx", "selectable"), &ItemList::set_item_selectable); + ClassDB::bind_method(D_METHOD("is_item_selectable", "idx"), &ItemList::is_item_selectable); - ClassDB::bind_method(D_METHOD("set_item_disabled","idx","disabled"),&ItemList::set_item_disabled); - ClassDB::bind_method(D_METHOD("is_item_disabled","idx"),&ItemList::is_item_disabled); + ClassDB::bind_method(D_METHOD("set_item_disabled", "idx", "disabled"), &ItemList::set_item_disabled); + ClassDB::bind_method(D_METHOD("is_item_disabled", "idx"), &ItemList::is_item_disabled); - ClassDB::bind_method(D_METHOD("set_item_metadata","idx","metadata"),&ItemList::set_item_metadata); - ClassDB::bind_method(D_METHOD("get_item_metadata","idx"),&ItemList::get_item_metadata); + ClassDB::bind_method(D_METHOD("set_item_metadata", "idx", "metadata"), &ItemList::set_item_metadata); + ClassDB::bind_method(D_METHOD("get_item_metadata", "idx"), &ItemList::get_item_metadata); - ClassDB::bind_method(D_METHOD("set_item_custom_bg_color","idx","custom_bg_color"),&ItemList::set_item_custom_bg_color); - ClassDB::bind_method(D_METHOD("get_item_custom_bg_color","idx"),&ItemList::get_item_custom_bg_color); + ClassDB::bind_method(D_METHOD("set_item_custom_bg_color", "idx", "custom_bg_color"), &ItemList::set_item_custom_bg_color); + ClassDB::bind_method(D_METHOD("get_item_custom_bg_color", "idx"), &ItemList::get_item_custom_bg_color); - ClassDB::bind_method(D_METHOD("set_item_tooltip_enabled","idx","enable"),&ItemList::set_item_tooltip_enabled); - ClassDB::bind_method(D_METHOD("is_item_tooltip_enabled","idx"),&ItemList::is_item_tooltip_enabled); + ClassDB::bind_method(D_METHOD("set_item_tooltip_enabled", "idx", "enable"), &ItemList::set_item_tooltip_enabled); + ClassDB::bind_method(D_METHOD("is_item_tooltip_enabled", "idx"), &ItemList::is_item_tooltip_enabled); - ClassDB::bind_method(D_METHOD("set_item_tooltip","idx","tooltip"),&ItemList::set_item_tooltip); - ClassDB::bind_method(D_METHOD("get_item_tooltip","idx"),&ItemList::get_item_tooltip); + ClassDB::bind_method(D_METHOD("set_item_tooltip", "idx", "tooltip"), &ItemList::set_item_tooltip); + ClassDB::bind_method(D_METHOD("get_item_tooltip", "idx"), &ItemList::get_item_tooltip); - ClassDB::bind_method(D_METHOD("select","idx","single"),&ItemList::select,DEFVAL(true)); - ClassDB::bind_method(D_METHOD("unselect","idx"),&ItemList::unselect); - ClassDB::bind_method(D_METHOD("is_selected","idx"),&ItemList::is_selected); - ClassDB::bind_method(D_METHOD("get_selected_items"),&ItemList::get_selected_items); + ClassDB::bind_method(D_METHOD("select", "idx", "single"), &ItemList::select, DEFVAL(true)); + ClassDB::bind_method(D_METHOD("unselect", "idx"), &ItemList::unselect); + ClassDB::bind_method(D_METHOD("is_selected", "idx"), &ItemList::is_selected); + ClassDB::bind_method(D_METHOD("get_selected_items"), &ItemList::get_selected_items); - ClassDB::bind_method(D_METHOD("get_item_count"),&ItemList::get_item_count); - ClassDB::bind_method(D_METHOD("remove_item","idx"),&ItemList::remove_item); + ClassDB::bind_method(D_METHOD("get_item_count"), &ItemList::get_item_count); + ClassDB::bind_method(D_METHOD("remove_item", "idx"), &ItemList::remove_item); - ClassDB::bind_method(D_METHOD("clear"),&ItemList::clear); - ClassDB::bind_method(D_METHOD("sort_items_by_text"),&ItemList::sort_items_by_text); + ClassDB::bind_method(D_METHOD("clear"), &ItemList::clear); + ClassDB::bind_method(D_METHOD("sort_items_by_text"), &ItemList::sort_items_by_text); - ClassDB::bind_method(D_METHOD("set_fixed_column_width","width"),&ItemList::set_fixed_column_width); - ClassDB::bind_method(D_METHOD("get_fixed_column_width"),&ItemList::get_fixed_column_width); + ClassDB::bind_method(D_METHOD("set_fixed_column_width", "width"), &ItemList::set_fixed_column_width); + ClassDB::bind_method(D_METHOD("get_fixed_column_width"), &ItemList::get_fixed_column_width); - ClassDB::bind_method(D_METHOD("set_same_column_width","enable"),&ItemList::set_same_column_width); - ClassDB::bind_method(D_METHOD("is_same_column_width"),&ItemList::is_same_column_width); + ClassDB::bind_method(D_METHOD("set_same_column_width", "enable"), &ItemList::set_same_column_width); + ClassDB::bind_method(D_METHOD("is_same_column_width"), &ItemList::is_same_column_width); - ClassDB::bind_method(D_METHOD("set_max_text_lines","lines"),&ItemList::set_max_text_lines); - ClassDB::bind_method(D_METHOD("get_max_text_lines"),&ItemList::get_max_text_lines); + ClassDB::bind_method(D_METHOD("set_max_text_lines", "lines"), &ItemList::set_max_text_lines); + ClassDB::bind_method(D_METHOD("get_max_text_lines"), &ItemList::get_max_text_lines); - ClassDB::bind_method(D_METHOD("set_max_columns","amount"),&ItemList::set_max_columns); - ClassDB::bind_method(D_METHOD("get_max_columns"),&ItemList::get_max_columns); + ClassDB::bind_method(D_METHOD("set_max_columns", "amount"), &ItemList::set_max_columns); + ClassDB::bind_method(D_METHOD("get_max_columns"), &ItemList::get_max_columns); - ClassDB::bind_method(D_METHOD("set_select_mode","mode"),&ItemList::set_select_mode); - ClassDB::bind_method(D_METHOD("get_select_mode"),&ItemList::get_select_mode); + ClassDB::bind_method(D_METHOD("set_select_mode", "mode"), &ItemList::set_select_mode); + ClassDB::bind_method(D_METHOD("get_select_mode"), &ItemList::get_select_mode); - ClassDB::bind_method(D_METHOD("set_icon_mode","mode"),&ItemList::set_icon_mode); - ClassDB::bind_method(D_METHOD("get_icon_mode"),&ItemList::get_icon_mode); + ClassDB::bind_method(D_METHOD("set_icon_mode", "mode"), &ItemList::set_icon_mode); + ClassDB::bind_method(D_METHOD("get_icon_mode"), &ItemList::get_icon_mode); + ClassDB::bind_method(D_METHOD("set_fixed_icon_size", "size"), &ItemList::set_fixed_icon_size); + ClassDB::bind_method(D_METHOD("get_fixed_icon_size"), &ItemList::get_fixed_icon_size); - ClassDB::bind_method(D_METHOD("set_fixed_icon_size","size"),&ItemList::set_fixed_icon_size); - ClassDB::bind_method(D_METHOD("get_fixed_icon_size"),&ItemList::get_fixed_icon_size); + ClassDB::bind_method(D_METHOD("set_icon_scale", "scale"), &ItemList::set_icon_scale); + ClassDB::bind_method(D_METHOD("get_icon_scale"), &ItemList::get_icon_scale); - ClassDB::bind_method(D_METHOD("set_icon_scale","scale"),&ItemList::set_icon_scale); - ClassDB::bind_method(D_METHOD("get_icon_scale"),&ItemList::get_icon_scale); + ClassDB::bind_method(D_METHOD("set_allow_rmb_select", "allow"), &ItemList::set_allow_rmb_select); + ClassDB::bind_method(D_METHOD("get_allow_rmb_select"), &ItemList::get_allow_rmb_select); - ClassDB::bind_method(D_METHOD("set_allow_rmb_select","allow"),&ItemList::set_allow_rmb_select); - ClassDB::bind_method(D_METHOD("get_allow_rmb_select"),&ItemList::get_allow_rmb_select); + ClassDB::bind_method(D_METHOD("get_item_at_pos", "pos", "exact"), &ItemList::get_item_at_pos, DEFVAL(false)); - ClassDB::bind_method(D_METHOD("get_item_at_pos","pos","exact"),&ItemList::get_item_at_pos,DEFVAL(false)); + ClassDB::bind_method(D_METHOD("ensure_current_is_visible"), &ItemList::ensure_current_is_visible); - ClassDB::bind_method(D_METHOD("ensure_current_is_visible"),&ItemList::ensure_current_is_visible); + ClassDB::bind_method(D_METHOD("get_v_scroll"), &ItemList::get_v_scroll); - ClassDB::bind_method(D_METHOD("get_v_scroll"),&ItemList::get_v_scroll); + ClassDB::bind_method(D_METHOD("_scroll_changed"), &ItemList::_scroll_changed); + ClassDB::bind_method(D_METHOD("_gui_input"), &ItemList::_gui_input); - ClassDB::bind_method(D_METHOD("_scroll_changed"),&ItemList::_scroll_changed); - ClassDB::bind_method(D_METHOD("_gui_input"),&ItemList::_gui_input); + BIND_CONSTANT(ICON_MODE_TOP); + BIND_CONSTANT(ICON_MODE_LEFT); + BIND_CONSTANT(SELECT_SINGLE); + BIND_CONSTANT(SELECT_MULTI); - BIND_CONSTANT( ICON_MODE_TOP ); - BIND_CONSTANT( ICON_MODE_LEFT ); - BIND_CONSTANT( SELECT_SINGLE ); - BIND_CONSTANT( SELECT_MULTI ); + ADD_SIGNAL(MethodInfo("item_selected", PropertyInfo(Variant::INT, "index"))); + ADD_SIGNAL(MethodInfo("item_rmb_selected", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::VECTOR2, "atpos"))); + ADD_SIGNAL(MethodInfo("multi_selected", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::BOOL, "selected"))); + ADD_SIGNAL(MethodInfo("item_activated", PropertyInfo(Variant::INT, "index"))); - ADD_SIGNAL( MethodInfo("item_selected",PropertyInfo(Variant::INT,"index"))); - ADD_SIGNAL( MethodInfo("item_rmb_selected",PropertyInfo(Variant::INT,"index"),PropertyInfo(Variant::VECTOR2,"atpos"))); - ADD_SIGNAL( MethodInfo("multi_selected",PropertyInfo(Variant::INT,"index"),PropertyInfo(Variant::BOOL,"selected"))); - ADD_SIGNAL( MethodInfo("item_activated",PropertyInfo(Variant::INT,"index"))); - - GLOBAL_DEF("gui/timers/incremental_search_max_interval_msec",2000); + GLOBAL_DEF("gui/timers/incremental_search_max_interval_msec", 2000); } ItemList::ItemList() { - current=-1; + current = -1; - select_mode=SELECT_SINGLE; - icon_mode=ICON_MODE_LEFT; + select_mode = SELECT_SINGLE; + icon_mode = ICON_MODE_LEFT; - fixed_column_width=0; + fixed_column_width = 0; same_column_width = false; - max_text_lines=1; - max_columns=1; + max_text_lines = 1; + max_columns = 1; - scroll_bar = memnew( VScrollBar ); + scroll_bar = memnew(VScrollBar); add_child(scroll_bar); - shape_changed=true; - scroll_bar->connect("value_changed",this,"_scroll_changed"); + shape_changed = true; + scroll_bar->connect("value_changed", this, "_scroll_changed"); set_focus_mode(FOCUS_ALL); - current_columns=1; - search_time_msec=0; - ensure_selected_visible=false; - defer_select_single=-1; - allow_rmb_select=false; + current_columns = 1; + search_time_msec = 0; + ensure_selected_visible = false; + defer_select_single = -1; + allow_rmb_select = false; icon_scale = 1.0f; set_clip_contents(true); } ItemList::~ItemList() { - } |