diff options
Diffstat (limited to 'scene/gui/item_list.cpp')
| -rw-r--r-- | scene/gui/item_list.cpp | 55 | 
1 files changed, 36 insertions, 19 deletions
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index 105d919338..f69ad8fa7e 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -40,6 +40,7 @@ void ItemList::add_item(const String& p_item,const Ref<Texture>& p_texture,bool  	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); @@ -57,6 +58,7 @@ void ItemList::add_icon_item(const Ref<Texture>& p_item,bool p_selectable){  	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); @@ -82,6 +84,16 @@ String ItemList::get_item_text(int p_idx) const{  } +void ItemList::set_item_tooltip_enabled(int p_idx, const bool p_enabled) { +	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); +	return items[p_idx].tooltip_enabled; +} +  void ItemList::set_item_tooltip(int p_idx,const String& p_tooltip){  	ERR_FAIL_INDEX(p_idx,items.size()); @@ -947,7 +959,23 @@ void ItemList::_notification(int p_what) {  			shape_changed=false;  		} +		//ensure_selected_visible needs to be checked before we draw the list. +		if (ensure_selected_visible && current>=0 && current <=items.size()) { +			Rect2 r = items[current].rect_cache; +			int from = scroll_bar->get_val(); +			int to = from + scroll_bar->get_page(); + +			if (r.pos.y < from) { +				scroll_bar->set_val(r.pos.y); +			} else if (r.pos.y+r.size.y > to) { +				scroll_bar->set_val(r.pos.y+r.size.y - (to-from)); +			} + + +		} + +		ensure_selected_visible=false;		  		Vector2 base_ofs = bg->get_offset();  		base_ofs.y-=int(scroll_bar->get_val()); @@ -1135,25 +1163,6 @@ void ItemList::_notification(int p_what) {  		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);  		} - - -		if (ensure_selected_visible && current>=0 && current <=items.size()) { - -			Rect2 r = items[current].rect_cache; -			int from = scroll_bar->get_val(); -			int to = from + scroll_bar->get_page(); - -			if (r.pos.y < from) { -				scroll_bar->set_val(r.pos.y); -			} else if (r.pos.y+r.size.y > to) { -				scroll_bar->set_val(r.pos.y+r.size.y - (to-from)); -			} - - -		} - -		ensure_selected_visible=false; -  	}  } @@ -1198,6 +1207,9 @@ String ItemList::get_tooltip(const Point2& p_pos) const {  	int closest = get_item_at_pos(p_pos);  	if (closest!=-1) { +		if (!items[closest].tooltip_enabled) { +			return ""; +		}  		if (items[closest].tooltip!="") {  			return items[closest].tooltip;  		} @@ -1294,6 +1306,9 @@ void ItemList::_bind_methods(){  	ObjectTypeDB::bind_method(_MD("set_item_custom_bg_color","idx","custom_bg_color"),&ItemList::set_item_custom_bg_color);  	ObjectTypeDB::bind_method(_MD("get_item_custom_bg_color","idx"),&ItemList::get_item_custom_bg_color); +	ObjectTypeDB::bind_method(_MD("set_item_tooltip_enabled","idx","enable"),&ItemList::set_item_tooltip_enabled); +	ObjectTypeDB::bind_method(_MD("is_item_tooltip_enabled","idx"),&ItemList::is_item_tooltip_enabled); +  	ObjectTypeDB::bind_method(_MD("set_item_tooltip","idx","tooltip"),&ItemList::set_item_tooltip);  	ObjectTypeDB::bind_method(_MD("get_item_tooltip","idx"),&ItemList::get_item_tooltip); @@ -1340,6 +1355,8 @@ void ItemList::_bind_methods(){  	ObjectTypeDB::bind_method(_MD("ensure_current_is_visible"),&ItemList::ensure_current_is_visible); +	ObjectTypeDB::bind_method(_MD("get_v_scroll"),&ItemList::get_v_scroll); +  	ObjectTypeDB::bind_method(_MD("_scroll_changed"),&ItemList::_scroll_changed);  	ObjectTypeDB::bind_method(_MD("_input_event"),&ItemList::_input_event);  |