diff options
Diffstat (limited to 'scene/gui/option_button.cpp')
-rw-r--r-- | scene/gui/option_button.cpp | 212 |
1 files changed, 94 insertions, 118 deletions
diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp index 9ead79b491..43f68d92ab 100644 --- a/scene/gui/option_button.cpp +++ b/scene/gui/option_button.cpp @@ -29,22 +29,19 @@ #include "option_button.h" #include "print_string.h" - Size2 OptionButton::get_minimum_size() const { - Size2 minsize = Button::get_minimum_size(); if (has_icon("arrow")) - minsize.width+=Control::get_icon("arrow")->get_width(); + minsize.width += Control::get_icon("arrow")->get_width(); return minsize; } void OptionButton::_notification(int p_what) { - - switch(p_what) { + switch (p_what) { case NOTIFICATION_DRAW: { @@ -53,86 +50,82 @@ void OptionButton::_notification(int p_what) { RID ci = get_canvas_item(); Ref<Texture> arrow = Control::get_icon("arrow"); - Ref<StyleBox> normal = get_stylebox("normal" ); + Ref<StyleBox> normal = get_stylebox("normal"); Size2 size = get_size(); - Point2 ofs( size.width - arrow->get_width() - get_constant("arrow_margin"), int(Math::abs((size.height-arrow->get_height())/2))); - arrow->draw(ci,ofs); + Point2 ofs(size.width - arrow->get_width() - get_constant("arrow_margin"), int(Math::abs((size.height - arrow->get_height()) / 2))); + arrow->draw(ci, ofs); } break; } } - void OptionButton::_selected(int p_which) { int selid = -1; - for (int i=0;i<popup->get_item_count();i++) { + for (int i = 0; i < popup->get_item_count(); i++) { - bool is_clicked = popup->get_item_ID(i)==p_which; + bool is_clicked = popup->get_item_ID(i) == p_which; if (is_clicked) { - selid=i; + selid = i; break; } } - if (selid==-1 && p_which>=0 && p_which<popup->get_item_count()) { - _select(p_which,true); + if (selid == -1 && p_which >= 0 && p_which < popup->get_item_count()) { + _select(p_which, true); } else { - ERR_FAIL_COND(selid==-1); + ERR_FAIL_COND(selid == -1); - _select(selid,true); + _select(selid, true); } } - void OptionButton::pressed() { - Size2 size=get_size(); - popup->set_global_pos( get_global_pos() + Size2( 0, size.height ) ); - popup->set_size( Size2( size.width, 0) ); + Size2 size = get_size(); + popup->set_global_pos(get_global_pos() + Size2(0, size.height)); + popup->set_size(Size2(size.width, 0)); popup->popup(); } -void OptionButton::add_icon_item(const Ref<Texture>& p_icon,const String& p_label,int p_ID) { +void OptionButton::add_icon_item(const Ref<Texture> &p_icon, const String &p_label, int p_ID) { - popup->add_icon_check_item( p_icon, p_label, p_ID ); - if (popup->get_item_count()==1) + popup->add_icon_check_item(p_icon, p_label, p_ID); + if (popup->get_item_count() == 1) select(0); } -void OptionButton::add_item(const String& p_label,int p_ID) { +void OptionButton::add_item(const String &p_label, int p_ID) { - popup->add_check_item( p_label, p_ID ); - if (popup->get_item_count()==1) + popup->add_check_item(p_label, p_ID); + if (popup->get_item_count() == 1) select(0); } -void OptionButton::set_item_text(int p_idx,const String& p_text) { - - popup->set_item_text(p_idx,p_text); +void OptionButton::set_item_text(int p_idx, const String &p_text) { + popup->set_item_text(p_idx, p_text); } -void OptionButton::set_item_icon(int p_idx,const Ref<Texture>& p_icon) { - - popup->set_item_icon(p_idx,p_icon); +void OptionButton::set_item_icon(int p_idx, const Ref<Texture> &p_icon) { + popup->set_item_icon(p_idx, p_icon); } -void OptionButton::set_item_ID(int p_idx,int p_ID) { +void OptionButton::set_item_ID(int p_idx, int p_ID) { - popup->set_item_ID(p_idx,p_ID); + popup->set_item_ID(p_idx, p_ID); } -void OptionButton::set_item_metadata(int p_idx,const Variant& p_metadata) { +void OptionButton::set_item_metadata(int p_idx, const Variant &p_metadata) { - popup->set_item_metadata(p_idx,p_metadata); + popup->set_item_metadata(p_idx, p_metadata); } -void OptionButton::set_item_disabled(int p_idx,bool p_disabled) { +void OptionButton::set_item_disabled(int p_idx, bool p_disabled) { - popup->set_item_disabled(p_idx,p_disabled); + popup->set_item_disabled(p_idx, p_disabled); } String OptionButton::get_item_text(int p_idx) const { @@ -159,8 +152,7 @@ bool OptionButton::is_item_disabled(int p_idx) const { return popup->is_item_disabled(p_idx); } - -int OptionButton::get_item_count() const { +int OptionButton::get_item_count() const { return popup->get_item_count(); } @@ -174,44 +166,41 @@ void OptionButton::clear() { popup->clear(); set_text(""); - current=-1; + current = -1; } -void OptionButton::_select(int p_idx,bool p_emit) { +void OptionButton::_select(int p_idx, bool p_emit) { - if (p_idx<0) + if (p_idx < 0) return; - if (p_idx==current) + if (p_idx == current) return; - ERR_FAIL_INDEX( p_idx, popup->get_item_count() ); + ERR_FAIL_INDEX(p_idx, popup->get_item_count()); - for (int i=0;i<popup->get_item_count();i++) { + for (int i = 0; i < popup->get_item_count(); i++) { - popup->set_item_checked(i,i==p_idx); + popup->set_item_checked(i, i == p_idx); } - - - current=p_idx; - set_text( popup->get_item_text( current ) ); - set_icon( popup->get_item_icon( current ) ); + current = p_idx; + set_text(popup->get_item_text(current)); + set_icon(popup->get_item_icon(current)); if (is_inside_tree() && p_emit) - emit_signal("item_selected",current); + emit_signal("item_selected", current); } void OptionButton::_select_int(int p_which) { - if (p_which<0 || p_which>=popup->get_item_count()) + if (p_which < 0 || p_which >= popup->get_item_count()) return; - _select(p_which,false); - + _select(p_which, false); } void OptionButton::select(int p_idx) { - _select(p_idx,false); + _select(p_idx, false); } int OptionButton::get_selected() const { @@ -222,17 +211,16 @@ int OptionButton::get_selected() const { int OptionButton::get_selected_ID() const { int idx = get_selected(); - if (idx<0) + if (idx < 0) return 0; return get_item_ID(current); } Variant OptionButton::get_selected_metadata() const { int idx = get_selected(); - if (idx<0) + if (idx < 0) return Variant(); return get_item_metadata(current); - } void OptionButton::remove_item(int p_idx) { @@ -243,7 +231,7 @@ void OptionButton::remove_item(int p_idx) { Array OptionButton::_get_items() const { Array items; - for(int i=0;i<get_item_count();i++) { + for (int i = 0; i < get_item_count(); i++) { items.push_back(get_item_text(i)); items.push_back(get_item_icon(i)); @@ -253,90 +241,78 @@ Array OptionButton::_get_items() const { } return items; - } -void OptionButton::_set_items(const Array& p_items){ +void OptionButton::_set_items(const Array &p_items) { ERR_FAIL_COND(p_items.size() % 5); clear(); - for(int i=0;i<p_items.size();i+=5) { + for (int i = 0; i < p_items.size(); i += 5) { - String text=p_items[i+0]; - Ref<Texture> icon=p_items[i+1]; - bool disabled=p_items[i+2]; - int id=p_items[i+3]; - Variant meta = p_items[i+4]; + String text = p_items[i + 0]; + Ref<Texture> icon = p_items[i + 1]; + bool disabled = p_items[i + 2]; + int id = p_items[i + 3]; + Variant meta = p_items[i + 4]; - int idx=get_item_count(); - add_item(text,id); - set_item_icon(idx,icon); - set_item_disabled(idx,disabled); - set_item_metadata(idx,meta); + int idx = get_item_count(); + add_item(text, id); + set_item_icon(idx, icon); + set_item_disabled(idx, disabled); + set_item_metadata(idx, meta); } - - } - void OptionButton::get_translatable_strings(List<String> *p_strings) const { return popup->get_translatable_strings(p_strings); } - void OptionButton::_bind_methods() { - ClassDB::bind_method(D_METHOD("_selected"),&OptionButton::_selected); - - ClassDB::bind_method(D_METHOD("add_item","label","id"),&OptionButton::add_item,DEFVAL(-1)); - ClassDB::bind_method(D_METHOD("add_icon_item","texture:Texture","label","id"),&OptionButton::add_icon_item); - ClassDB::bind_method(D_METHOD("set_item_text","idx","text"),&OptionButton::set_item_text); - ClassDB::bind_method(D_METHOD("set_item_icon","idx","texture:Texture"),&OptionButton::set_item_icon); - ClassDB::bind_method(D_METHOD("set_item_disabled","idx","disabled"),&OptionButton::set_item_disabled); - ClassDB::bind_method(D_METHOD("set_item_ID","idx","id"),&OptionButton::set_item_ID); - ClassDB::bind_method(D_METHOD("set_item_metadata","idx","metadata"),&OptionButton::set_item_metadata); - ClassDB::bind_method(D_METHOD("get_item_text","idx"),&OptionButton::get_item_text); - ClassDB::bind_method(D_METHOD("get_item_icon:Texture","idx"),&OptionButton::get_item_icon); - ClassDB::bind_method(D_METHOD("get_item_ID","idx"),&OptionButton::get_item_ID); - ClassDB::bind_method(D_METHOD("get_item_metadata","idx"),&OptionButton::get_item_metadata); - ClassDB::bind_method(D_METHOD("is_item_disabled","idx"),&OptionButton::is_item_disabled); - ClassDB::bind_method(D_METHOD("get_item_count"),&OptionButton::get_item_count); - ClassDB::bind_method(D_METHOD("add_separator"),&OptionButton::add_separator); - ClassDB::bind_method(D_METHOD("clear"),&OptionButton::clear); - ClassDB::bind_method(D_METHOD("select","idx"),&OptionButton::select); - ClassDB::bind_method(D_METHOD("get_selected"),&OptionButton::get_selected); - ClassDB::bind_method(D_METHOD("get_selected_ID"),&OptionButton::get_selected_ID); - ClassDB::bind_method(D_METHOD("get_selected_metadata"),&OptionButton::get_selected_metadata); - ClassDB::bind_method(D_METHOD("remove_item","idx"),&OptionButton::remove_item); - ClassDB::bind_method(D_METHOD("_select_int"),&OptionButton::_select_int); - - ClassDB::bind_method(D_METHOD("_set_items"),&OptionButton::_set_items); - ClassDB::bind_method(D_METHOD("_get_items"),&OptionButton::_get_items); - - ADD_PROPERTY( PropertyInfo(Variant::INT,"selected"), "_select_int","get_selected") ; - ADD_PROPERTY( PropertyInfo(Variant::ARRAY,"items",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR), "_set_items","_get_items") ; - ADD_SIGNAL( MethodInfo("item_selected", PropertyInfo( Variant::INT,"ID") ) ); + ClassDB::bind_method(D_METHOD("_selected"), &OptionButton::_selected); + + ClassDB::bind_method(D_METHOD("add_item", "label", "id"), &OptionButton::add_item, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("add_icon_item", "texture:Texture", "label", "id"), &OptionButton::add_icon_item); + ClassDB::bind_method(D_METHOD("set_item_text", "idx", "text"), &OptionButton::set_item_text); + ClassDB::bind_method(D_METHOD("set_item_icon", "idx", "texture:Texture"), &OptionButton::set_item_icon); + ClassDB::bind_method(D_METHOD("set_item_disabled", "idx", "disabled"), &OptionButton::set_item_disabled); + ClassDB::bind_method(D_METHOD("set_item_ID", "idx", "id"), &OptionButton::set_item_ID); + ClassDB::bind_method(D_METHOD("set_item_metadata", "idx", "metadata"), &OptionButton::set_item_metadata); + ClassDB::bind_method(D_METHOD("get_item_text", "idx"), &OptionButton::get_item_text); + ClassDB::bind_method(D_METHOD("get_item_icon:Texture", "idx"), &OptionButton::get_item_icon); + ClassDB::bind_method(D_METHOD("get_item_ID", "idx"), &OptionButton::get_item_ID); + ClassDB::bind_method(D_METHOD("get_item_metadata", "idx"), &OptionButton::get_item_metadata); + ClassDB::bind_method(D_METHOD("is_item_disabled", "idx"), &OptionButton::is_item_disabled); + ClassDB::bind_method(D_METHOD("get_item_count"), &OptionButton::get_item_count); + ClassDB::bind_method(D_METHOD("add_separator"), &OptionButton::add_separator); + ClassDB::bind_method(D_METHOD("clear"), &OptionButton::clear); + ClassDB::bind_method(D_METHOD("select", "idx"), &OptionButton::select); + ClassDB::bind_method(D_METHOD("get_selected"), &OptionButton::get_selected); + ClassDB::bind_method(D_METHOD("get_selected_ID"), &OptionButton::get_selected_ID); + ClassDB::bind_method(D_METHOD("get_selected_metadata"), &OptionButton::get_selected_metadata); + ClassDB::bind_method(D_METHOD("remove_item", "idx"), &OptionButton::remove_item); + ClassDB::bind_method(D_METHOD("_select_int"), &OptionButton::_select_int); + + ClassDB::bind_method(D_METHOD("_set_items"), &OptionButton::_set_items); + ClassDB::bind_method(D_METHOD("_get_items"), &OptionButton::_get_items); + + ADD_PROPERTY(PropertyInfo(Variant::INT, "selected"), "_select_int", "get_selected"); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_items", "_get_items"); + ADD_SIGNAL(MethodInfo("item_selected", PropertyInfo(Variant::INT, "ID"))); } OptionButton::OptionButton() { - - popup = memnew( PopupMenu ); + popup = memnew(PopupMenu); popup->hide(); popup->set_as_toplevel(true); add_child(popup); - popup->connect("id_pressed", this,"_selected"); + popup->connect("id_pressed", this, "_selected"); - current=-1; + current = -1; set_text_align(ALIGN_LEFT); } - OptionButton::~OptionButton() { - - - } - - |