diff options
Diffstat (limited to 'scene/gui/line_edit.cpp')
-rw-r--r-- | scene/gui/line_edit.cpp | 648 |
1 files changed, 304 insertions, 344 deletions
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 7f61cf80ec..20725194cf 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -27,10 +27,10 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "line_edit.h" +#include "label.h" #include "os/keyboard.h" #include "os/os.h" #include "print_string.h" -#include "label.h" #include "translation.h" #ifdef TOOLS_ENABLED #include "editor/editor_settings.h" @@ -38,27 +38,26 @@ static bool _is_text_char(CharType c) { - return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9') || c=='_'; + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_'; } void LineEdit::_gui_input(InputEvent p_event) { - - switch(p_event.type) { + switch (p_event.type) { case InputEvent::MOUSE_BUTTON: { const InputEventMouseButton &b = p_event.mouse_button; - if (b.pressed && b.button_index==BUTTON_RIGHT) { + if (b.pressed && b.button_index == BUTTON_RIGHT) { menu->set_pos(get_global_transform().xform(get_local_mouse_pos())); - menu->set_size(Vector2(1,1)); + menu->set_size(Vector2(1, 1)); menu->popup(); grab_focus(); return; } - if (b.button_index!=BUTTON_LEFT) + if (b.button_index != BUTTON_LEFT) break; _reset_caret_blink_timer(); @@ -71,28 +70,28 @@ void LineEdit::_gui_input(InputEvent p_event) { if (b.mod.shift) { selection_fill_at_cursor(); - selection.creating=true; + selection.creating = true; } else { if (b.doubleclick) { - selection.enabled=true; - selection.begin=0; - selection.end=text.length(); - selection.doubleclick=true; + selection.enabled = true; + selection.begin = 0; + selection.end = text.length(); + selection.doubleclick = true; } - selection.drag_attempt=false; + selection.drag_attempt = false; - if ((cursor_pos<selection.begin) || (cursor_pos>selection.end) || !selection.enabled) { + if ((cursor_pos < selection.begin) || (cursor_pos > selection.end) || !selection.enabled) { selection_clear(); - selection.cursor_start=cursor_pos; - selection.creating=true; + selection.cursor_start = cursor_pos; + selection.creating = true; } else if (selection.enabled) { - selection.drag_attempt=true; + selection.drag_attempt = true; } } @@ -100,23 +99,23 @@ void LineEdit::_gui_input(InputEvent p_event) { } else { - if ( (!selection.creating) && (!selection.doubleclick)) { + if ((!selection.creating) && (!selection.doubleclick)) { selection_clear(); } - selection.creating=false; - selection.doubleclick=false; + selection.creating = false; + selection.doubleclick = false; if (OS::get_singleton()->has_virtual_keyboard()) - OS::get_singleton()->show_virtual_keyboard(text,get_global_rect()); + OS::get_singleton()->show_virtual_keyboard(text, get_global_rect()); } update(); } break; case InputEvent::MOUSE_MOTION: { - const InputEventMouseMotion& m=p_event.mouse_motion; + const InputEventMouseMotion &m = p_event.mouse_motion; - if (m.button_mask&BUTTON_LEFT) { + if (m.button_mask & BUTTON_LEFT) { if (selection.creating) { set_cursor_at_pixel_pos(m.x); @@ -127,22 +126,21 @@ void LineEdit::_gui_input(InputEvent p_event) { } break; case InputEvent::KEY: { - const InputEventKey &k =p_event.key; + const InputEventKey &k = p_event.key; if (!k.pressed) return; - unsigned int code = k.scancode; - + unsigned int code = k.scancode; if (k.mod.command) { - bool handled=true; + bool handled = true; switch (code) { case (KEY_X): { // CUT - if(editable) { + if (editable) { cut_text(); } @@ -156,7 +154,7 @@ void LineEdit::_gui_input(InputEvent p_event) { case (KEY_V): { // PASTE - if(editable) { + if (editable) { paste_text(); } @@ -165,22 +163,20 @@ void LineEdit::_gui_input(InputEvent p_event) { case (KEY_Z): { // Simple One level undo - if(editable) { + if (editable) { undo(); - } - } break; case (KEY_U): { // Delete from start to cursor - if(editable) { + if (editable) { selection_clear(); undo_text = text; - text = text.substr(cursor_pos,text.length()-cursor_pos); + text = text.substr(cursor_pos, text.length() - cursor_pos); Ref<Font> font = get_font("font"); @@ -192,15 +188,13 @@ void LineEdit::_gui_input(InputEvent p_event) { set_cursor_pos(0); _text_changed(); - } - } break; case (KEY_Y): { // PASTE (Yank for unix users) - if(editable) { + if (editable) { paste_text(); } @@ -208,11 +202,11 @@ void LineEdit::_gui_input(InputEvent p_event) { } break; case (KEY_K): { // Delete from cursor_pos to end - if(editable) { + if (editable) { selection_clear(); undo_text = text; - text = text.substr(0,cursor_pos); + text = text.substr(0, cursor_pos); _text_changed(); } @@ -220,7 +214,7 @@ void LineEdit::_gui_input(InputEvent p_event) { case (KEY_A): { //Select All select(); } break; - default: { handled=false;} + default: { handled = false; } } if (handled) { @@ -232,13 +226,13 @@ void LineEdit::_gui_input(InputEvent p_event) { _reset_caret_blink_timer(); if (!k.mod.meta) { - bool handled=true; + bool handled = true; switch (code) { case KEY_ENTER: case KEY_RETURN: { - emit_signal( "text_entered",text ); + emit_signal("text_entered", text); if (OS::get_singleton()->has_virtual_keyboard()) OS::get_singleton()->hide_virtual_keyboard(); @@ -251,7 +245,7 @@ void LineEdit::_gui_input(InputEvent p_event) { break; if (selection.enabled) { - undo_text=text; + undo_text = text; selection_delete(); break; } @@ -260,20 +254,20 @@ void LineEdit::_gui_input(InputEvent p_event) { if (k.mod.alt) { #else if (k.mod.alt) { - handled=false; + handled = false; break; } else if (k.mod.command) { #endif - int cc=cursor_pos; - bool prev_char=false; + int cc = cursor_pos; + bool prev_char = false; - while (cc>0) { - bool ischar=_is_text_char(text[cc-1]); + while (cc > 0) { + bool ischar = _is_text_char(text[cc - 1]); if (prev_char && !ischar) break; - prev_char=ischar; + prev_char = ischar; cc--; } @@ -282,7 +276,7 @@ void LineEdit::_gui_input(InputEvent p_event) { set_cursor_pos(cc); } else { - undo_text=text; + undo_text = text; delete_char(); } @@ -299,7 +293,7 @@ void LineEdit::_gui_input(InputEvent p_event) { #ifndef APPLE_STYLE_KEYS if (!k.mod.alt) #endif - shift_selection_check_pre(k.mod.shift); + shift_selection_check_pre(k.mod.shift); #ifdef APPLE_STYLE_KEYS if (k.mod.command) { @@ -308,27 +302,27 @@ void LineEdit::_gui_input(InputEvent p_event) { #else if (k.mod.alt) { - handled=false; + handled = false; break; } else if (k.mod.command) { #endif - bool prev_char=false; - int cc=cursor_pos; + bool prev_char = false; + int cc = cursor_pos; - while (cc>0) { - bool ischar=_is_text_char(text[cc-1]); + while (cc > 0) { + bool ischar = _is_text_char(text[cc - 1]); if (prev_char && !ischar) break; - prev_char=ischar; + prev_char = ischar; cc--; } set_cursor_pos(cc); } else { - set_cursor_pos(get_cursor_pos()-1); + set_cursor_pos(get_cursor_pos() - 1); } shift_selection_check_post(k.mod.shift); @@ -351,27 +345,27 @@ void LineEdit::_gui_input(InputEvent p_event) { } else if (k.mod.alt) { #else if (k.mod.alt) { - handled=false; + handled = false; break; } else if (k.mod.command) { #endif - bool prev_char=false; - int cc=cursor_pos; + bool prev_char = false; + int cc = cursor_pos; - while (cc<text.length()) { - bool ischar=_is_text_char(text[cc]); + while (cc < text.length()) { + bool ischar = _is_text_char(text[cc]); if (prev_char && !ischar) break; - prev_char=ischar; + prev_char = ischar; cc++; } set_cursor_pos(cc); } else { - set_cursor_pos(get_cursor_pos()+1); + set_cursor_pos(get_cursor_pos() + 1); } shift_selection_check_post(k.mod.shift); @@ -388,43 +382,43 @@ void LineEdit::_gui_input(InputEvent p_event) { } if (selection.enabled) { - undo_text=text; + undo_text = text; selection_delete(); break; } int text_len = text.length(); - if (cursor_pos==text_len) + if (cursor_pos == text_len) break; // nothing to do #ifdef APPLE_STYLE_KEYS if (k.mod.alt) { #else if (k.mod.alt) { - handled=false; + handled = false; break; } else if (k.mod.command) { #endif - int cc=cursor_pos; + int cc = cursor_pos; - bool prev_char=false; + bool prev_char = false; - while (cc<text.length()) { + while (cc < text.length()) { - bool ischar=_is_text_char(text[cc]); + bool ischar = _is_text_char(text[cc]); if (prev_char && !ischar) break; - prev_char=ischar; + prev_char = ischar; cc++; } - delete_text(cursor_pos,cc); + delete_text(cursor_pos, cc); } else { - undo_text=text; - set_cursor_pos(cursor_pos+1); + undo_text = text; + set_cursor_pos(cursor_pos + 1); delete_char(); } @@ -456,21 +450,20 @@ void LineEdit::_gui_input(InputEvent p_event) { shift_selection_check_post(k.mod.shift); } break; - default: { - handled=false; + handled = false; } break; } if (handled) { accept_event(); } else if (!k.mod.alt && !k.mod.command) { - if (k.unicode>=32 && k.scancode!=KEY_DELETE) { + if (k.unicode >= 32 && k.scancode != KEY_DELETE) { if (editable) { selection_delete(); - CharType ucodestr[2]={(CharType)k.unicode,0}; + CharType ucodestr[2] = { (CharType)k.unicode, 0 }; append_at_cursor(ucodestr); _text_changed(); accept_event(); @@ -482,14 +475,11 @@ void LineEdit::_gui_input(InputEvent p_event) { } update(); - } - return; } break; - } } @@ -500,31 +490,30 @@ void LineEdit::set_align(Align p_align) { update(); } -LineEdit::Align LineEdit::get_align() const{ +LineEdit::Align LineEdit::get_align() const { return align; } -Variant LineEdit::get_drag_data(const Point2& p_point) { +Variant LineEdit::get_drag_data(const Point2 &p_point) { if (selection.drag_attempt && selection.enabled) { String t = text.substr(selection.begin, selection.end - selection.begin); - Label *l = memnew( Label ); + Label *l = memnew(Label); l->set_text(t); set_drag_preview(l); - return t; + return t; } return Variant(); - } -bool LineEdit::can_drop_data(const Point2& p_point,const Variant& p_data) const{ +bool LineEdit::can_drop_data(const Point2 &p_point, const Variant &p_data) const { - return p_data.get_type()==Variant::STRING; + return p_data.get_type() == Variant::STRING; } -void LineEdit::drop_data(const Point2& p_point,const Variant& p_data){ +void LineEdit::drop_data(const Point2 &p_point, const Variant &p_data) { - if (p_data.get_type()==Variant::STRING) { + if (p_data.get_type() == Variant::STRING) { set_cursor_at_pixel_pos(p_point.x); int selected = selection.end - selection.begin; @@ -537,30 +526,29 @@ void LineEdit::drop_data(const Point2& p_point,const Variant& p_data){ text.erase(selection.begin, selected); append_at_cursor(p_data); - selection.begin = cursor_pos-selected; + selection.begin = cursor_pos - selected; selection.end = cursor_pos; } } - void LineEdit::_notification(int p_what) { - switch(p_what) { + switch (p_what) { #ifdef TOOLS_ENABLED case NOTIFICATION_ENTER_TREE: { if (get_tree()->is_editor_hint()) { cursor_set_blink_enabled(EDITOR_DEF("text_editor/cursor/caret_blink", false)); cursor_set_blink_speed(EDITOR_DEF("text_editor/cursor/caret_blink_speed", 0.65)); - if (!EditorSettings::get_singleton()->is_connected("settings_changed",this,"_editor_settings_changed")) { - EditorSettings::get_singleton()->connect("settings_changed",this,"_editor_settings_changed"); + if (!EditorSettings::get_singleton()->is_connected("settings_changed", this, "_editor_settings_changed")) { + EditorSettings::get_singleton()->connect("settings_changed", this, "_editor_settings_changed"); } } } break; #endif case NOTIFICATION_RESIZED: { - set_cursor_pos( get_cursor_pos() ); + set_cursor_pos(get_cursor_pos()); } break; case MainLoop::NOTIFICATION_WM_FOCUS_IN: { @@ -579,100 +567,100 @@ void LineEdit::_notification(int p_what) { draw_caret = false; } - int width,height; + int width, height; - Size2 size=get_size(); - width=size.width; - height=size.height; + Size2 size = get_size(); + width = size.width; + height = size.height; RID ci = get_canvas_item(); Ref<StyleBox> style = get_stylebox("normal"); if (!is_editable()) - style=get_stylebox("read_only"); + style = get_stylebox("read_only"); - Ref<Font> font=get_font("font"); + Ref<Font> font = get_font("font"); - style->draw( ci, Rect2( Point2(), size ) ); + style->draw(ci, Rect2(Point2(), size)); if (has_focus()) { - get_stylebox("focus")->draw( ci, Rect2( Point2(), size ) ); + get_stylebox("focus")->draw(ci, Rect2(Point2(), size)); } - int x_ofs=0; + int x_ofs = 0; switch (align) { case ALIGN_FILL: case ALIGN_LEFT: { - x_ofs=style->get_offset().x; + x_ofs = style->get_offset().x; } break; case ALIGN_CENTER: { - x_ofs=int(size.width-(cached_width))/2; + x_ofs = int(size.width - (cached_width)) / 2; } break; case ALIGN_RIGHT: { - x_ofs=int(size.width-style->get_offset().x-(cached_width)); + x_ofs = int(size.width - style->get_offset().x - (cached_width)); } break; } - int ofs_max=width-style->get_minimum_size().width; - int char_ofs=window_pos; + int ofs_max = width - style->get_minimum_size().width; + int char_ofs = window_pos; - int y_area=height-style->get_minimum_size().height; - int y_ofs=style->get_offset().y; + int y_area = height - style->get_minimum_size().height; + int y_ofs = style->get_offset().y; - int font_ascent=font->get_ascent(); + int font_ascent = font->get_ascent(); - Color selection_color=get_color("selection_color"); - Color font_color=get_color("font_color"); - Color font_color_selected=get_color("font_color_selected"); - Color cursor_color=get_color("cursor_color"); + Color selection_color = get_color("selection_color"); + Color font_color = get_color("font_color"); + Color font_color_selected = get_color("font_color_selected"); + Color cursor_color = get_color("cursor_color"); - const String& t = text.empty() ? placeholder : text; + const String &t = text.empty() ? placeholder : text; // draw placeholder color - if(text.empty()) + if (text.empty()) font_color.a *= placeholder_alpha; int caret_height = font->get_height() > y_area ? y_area : font->get_height(); - while(true) { + while (true) { - //end of string, break! - if (char_ofs>=t.length()) + //end of string, break! + if (char_ofs >= t.length()) break; - CharType cchar=pass?'*':t[char_ofs]; - CharType next=pass?'*':t[char_ofs+1]; - int char_width=font->get_char_size( cchar,next ).width; + CharType cchar = pass ? '*' : t[char_ofs]; + CharType next = pass ? '*' : t[char_ofs + 1]; + int char_width = font->get_char_size(cchar, next).width; - // end of widget, break! + // end of widget, break! if ((x_ofs + char_width) > ofs_max) break; - - bool selected=selection.enabled && char_ofs>=selection.begin && char_ofs<selection.end; + bool selected = selection.enabled && char_ofs >= selection.begin && char_ofs < selection.end; if (selected) VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(x_ofs, y_ofs), Size2(char_width, caret_height)), selection_color); - font->draw_char(ci, Point2(x_ofs, y_ofs + font_ascent), cchar, next, selected ? font_color_selected : font_color); - if (char_ofs==cursor_pos && draw_caret) { + if (char_ofs == cursor_pos && draw_caret) { VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2( - Point2( x_ofs , y_ofs ), Size2( 1, caret_height ) ), cursor_color ); + Point2(x_ofs, y_ofs), Size2(1, caret_height)), + cursor_color); } - x_ofs+=char_width; + x_ofs += char_width; char_ofs++; } - if (char_ofs==cursor_pos && draw_caret) {//may be at the end + if (char_ofs == cursor_pos && draw_caret) { //may be at the end VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2( - Point2( x_ofs , y_ofs ), Size2( 1, caret_height ) ), cursor_color ); + Point2(x_ofs, y_ofs), Size2(1, caret_height)), + cursor_color); } } break; case NOTIFICATION_FOCUS_ENTER: { @@ -682,7 +670,7 @@ void LineEdit::_notification(int p_what) { } if (OS::get_singleton()->has_virtual_keyboard()) - OS::get_singleton()->show_virtual_keyboard(text,get_global_rect()); + OS::get_singleton()->show_virtual_keyboard(text, get_global_rect()); } break; case NOTIFICATION_FOCUS_EXIT: { @@ -691,13 +679,12 @@ void LineEdit::_notification(int p_what) { OS::get_singleton()->hide_virtual_keyboard(); } break; - } } void LineEdit::copy_text() { - if(selection.enabled) { + if (selection.enabled) { OS::get_singleton()->set_clipboard(text.substr(selection.begin, selection.end - selection.begin)); } @@ -705,7 +692,7 @@ void LineEdit::copy_text() { void LineEdit::cut_text() { - if(selection.enabled) { + if (selection.enabled) { undo_text = text; OS::get_singleton()->set_clipboard(text.substr(selection.begin, selection.end - selection.begin)); selection_delete(); @@ -716,16 +703,13 @@ void LineEdit::paste_text() { String paste_buffer = OS::get_singleton()->get_clipboard(); - if(paste_buffer != "") { + if (paste_buffer != "") { - if(selection.enabled) selection_delete(); + if (selection.enabled) selection_delete(); append_at_cursor(paste_buffer); _text_changed(); } - - - } void LineEdit::undo() { @@ -736,10 +720,10 @@ void LineEdit::undo() { Ref<Font> font = get_font("font"); cached_width = 0; - for (int i = 0; i<text.length(); i++) + for (int i = 0; i < text.length(); i++) cached_width += font->get_char_size(text[i]).width; - if(old_cursor_pos > text.length()) { + if (old_cursor_pos > text.length()) { set_cursor_pos(text.length()); } else { set_cursor_pos(old_cursor_pos); @@ -750,12 +734,11 @@ void LineEdit::undo() { void LineEdit::shift_selection_check_pre(bool p_shift) { - if (!selection.enabled && p_shift) { - selection.cursor_start=cursor_pos; + if (!selection.enabled && p_shift) { + selection.cursor_start = cursor_pos; } if (!p_shift) selection_clear(); - } void LineEdit::shift_selection_check_post(bool p_shift) { @@ -781,32 +764,30 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { } break; case ALIGN_CENTER: { - pixel_ofs=int(size.width-(cached_width))/2; + pixel_ofs = int(size.width - (cached_width)) / 2; } break; case ALIGN_RIGHT: { - pixel_ofs=int(size.width-style->get_offset().x-(cached_width)); + pixel_ofs = int(size.width - style->get_offset().x - (cached_width)); } break; } - - while (ofs<text.length()) { + while (ofs < text.length()) { int char_w = 0; if (font != NULL) { char_w = font->get_char_size(text[ofs]).width; } - pixel_ofs+=char_w; + pixel_ofs += char_w; if (pixel_ofs > p_x) { //found what we look for break; } - ofs++; } - set_cursor_pos( ofs ); + set_cursor_pos(ofs); /* int new_cursor_pos=p_x; @@ -816,7 +797,6 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { set_cursor_pos(window_pos+new_cursor_pos); */ } - bool LineEdit::cursor_get_blink_enabled() const { return caret_blink_enabled; } @@ -847,7 +827,7 @@ void LineEdit::_reset_caret_blink_timer() { draw_caret = true; update(); } - } +} void LineEdit::_toggle_draw_caret() { draw_caret = !draw_caret; @@ -858,18 +838,18 @@ void LineEdit::_toggle_draw_caret() { void LineEdit::delete_char() { - if ((text.length()<=0) || (cursor_pos==0)) return; + if ((text.length() <= 0) || (cursor_pos == 0)) return; Ref<Font> font = get_font("font"); if (font != NULL) { cached_width -= font->get_char_size(text[cursor_pos - 1]).width; } - text.erase( cursor_pos-1, 1 ); + text.erase(cursor_pos - 1, 1); - set_cursor_pos(get_cursor_pos()-1); + set_cursor_pos(get_cursor_pos() - 1); - if (cursor_pos==window_pos) { + if (cursor_pos == window_pos) { //set_window_pos(cursor_pos-get_window_length()); } @@ -881,29 +861,26 @@ void LineEdit::delete_text(int p_from_column, int p_to_column) { undo_text = text; - if (text.size() > 0) - { + if (text.size() > 0) { Ref<Font> font = get_font("font"); if (font != NULL) { for (int i = p_from_column; i < p_to_column; i++) cached_width -= font->get_char_size(text[i]).width; } - } - else - { + } else { cached_width = 0; } - text.erase(p_from_column,p_to_column-p_from_column); - cursor_pos-=CLAMP( cursor_pos-p_from_column, 0, p_to_column-p_from_column); + text.erase(p_from_column, p_to_column - p_from_column); + cursor_pos -= CLAMP(cursor_pos - p_from_column, 0, p_to_column - p_from_column); - if (cursor_pos>=text.length()) { + if (cursor_pos >= text.length()) { - cursor_pos=text.length(); + cursor_pos = text.length(); } - if (window_pos>cursor_pos) { + if (window_pos > cursor_pos) { - window_pos=cursor_pos; + window_pos = cursor_pos; } _text_changed(); @@ -914,8 +891,8 @@ void LineEdit::set_text(String p_text) { clear_internal(); append_at_cursor(p_text); update(); - cursor_pos=0; - window_pos=0; + cursor_pos = 0; + window_pos = 0; _text_changed(); } @@ -941,7 +918,6 @@ String LineEdit::get_placeholder() const { return placeholder; } - void LineEdit::set_placeholder_alpha(float p_alpha) { placeholder_alpha = p_alpha; @@ -955,76 +931,72 @@ float LineEdit::get_placeholder_alpha() const { void LineEdit::set_cursor_pos(int p_pos) { - if (p_pos>(int)text.length()) - p_pos=text.length(); - - if(p_pos<0) - p_pos=0; + if (p_pos > (int)text.length()) + p_pos = text.length(); + if (p_pos < 0) + p_pos = 0; - - cursor_pos=p_pos; + cursor_pos = p_pos; if (!is_inside_tree()) { - window_pos=cursor_pos; + window_pos = cursor_pos; return; } Ref<StyleBox> style = get_stylebox("normal"); - Ref<Font> font=get_font("font"); + Ref<Font> font = get_font("font"); - if (cursor_pos<window_pos) { + if (cursor_pos < window_pos) { /* Adjust window if cursor goes too much to the left */ set_window_pos(cursor_pos); - } else if (cursor_pos>window_pos) { + } else if (cursor_pos > window_pos) { /* Adjust window if cursor goes too much to the right */ - int window_width=get_size().width-style->get_minimum_size().width; + int window_width = get_size().width - style->get_minimum_size().width; - if (window_width<0) + if (window_width < 0) return; - int wp=window_pos; + int wp = window_pos; if (font.is_valid()) { - int accum_width=0; + int accum_width = 0; - for(int i=cursor_pos;i>=window_pos;i--) { + for (int i = cursor_pos; i >= window_pos; i--) { - if (i>=text.length()) { - accum_width=font->get_char_size(' ').width; //anything should do + if (i >= text.length()) { + accum_width = font->get_char_size(' ').width; //anything should do } else { - accum_width+=font->get_char_size(text[i],i+1<text.length()?text[i+1]:0).width; //anything should do + accum_width += font->get_char_size(text[i], i + 1 < text.length() ? text[i + 1] : 0).width; //anything should do } - if (accum_width>=window_width) + if (accum_width >= window_width) break; - wp=i; + wp = i; } } - if (wp!=window_pos) - set_window_pos( wp ); - + if (wp != window_pos) + set_window_pos(wp); } update(); } -int LineEdit::get_cursor_pos() const { +int LineEdit::get_cursor_pos() const { return cursor_pos; } void LineEdit::set_window_pos(int p_pos) { - window_pos=p_pos; - if (window_pos<0) window_pos=0; + window_pos = p_pos; + if (window_pos < 0) window_pos = 0; } void LineEdit::append_at_cursor(String p_text) { - - if ( ( max_length <= 0 ) || (text.length()+p_text.length() <= max_length)) { + if ((max_length <= 0) || (text.length() + p_text.length() <= max_length)) { undo_text = text; @@ -1032,45 +1004,44 @@ void LineEdit::append_at_cursor(String p_text) { if (font != NULL) { for (int i = 0; i < p_text.length(); i++) cached_width += font->get_char_size(p_text[i]).width; - } - else { + } else { cached_width = 0; } - String pre = text.substr( 0, cursor_pos ); - String post = text.substr( cursor_pos, text.length()-cursor_pos ); - text=pre+p_text+post; - set_cursor_pos(cursor_pos+p_text.length()); + String pre = text.substr(0, cursor_pos); + String post = text.substr(cursor_pos, text.length() - cursor_pos); + text = pre + p_text + post; + set_cursor_pos(cursor_pos + p_text.length()); } } void LineEdit::clear_internal() { cached_width = 0; - cursor_pos=0; - window_pos=0; - undo_text=""; - text=""; + cursor_pos = 0; + window_pos = 0; + undo_text = ""; + text = ""; update(); } Size2 LineEdit::get_minimum_size() const { Ref<StyleBox> style = get_stylebox("normal"); - Ref<Font> font=get_font("font"); + Ref<Font> font = get_font("font"); - Size2 min=style->get_minimum_size(); - min.height+=font->get_height(); + Size2 min = style->get_minimum_size(); + min.height += font->get_height(); //minimum size of text int space_size = font->get_char_size(' ').x; - int mstext = get_constant("minimum_spaces")*space_size; + int mstext = get_constant("minimum_spaces") * space_size; if (expand_to_text_length) { - mstext=MAX(mstext,font->get_string_size(text).x+space_size); //add a spce because some fonts are too exact + mstext = MAX(mstext, font->get_string_size(text).x + space_size); //add a spce because some fonts are too exact } - min.width+=mstext; + min.width += mstext; return min; } @@ -1079,26 +1050,26 @@ Size2 LineEdit::get_minimum_size() const { void LineEdit::selection_clear() { - selection.begin=0; - selection.end=0; - selection.cursor_start=0; - selection.enabled=false; - selection.creating=false; - selection.doubleclick=false; + selection.begin = 0; + selection.end = 0; + selection.cursor_start = 0; + selection.enabled = false; + selection.creating = false; + selection.doubleclick = false; update(); } void LineEdit::selection_delete() { if (selection.enabled) - delete_text(selection.begin,selection.end); + delete_text(selection.begin, selection.end); selection_clear(); } void LineEdit::set_max_length(int p_max_length) { - ERR_FAIL_COND(p_max_length<0); + ERR_FAIL_COND(p_max_length < 0); max_length = p_max_length; set_text(text); } @@ -1112,16 +1083,16 @@ void LineEdit::selection_fill_at_cursor() { int aux; - selection.begin=cursor_pos; - selection.end=selection.cursor_start; + selection.begin = cursor_pos; + selection.end = selection.cursor_start; - if (selection.end<selection.begin) { - aux=selection.end; - selection.end=selection.begin; - selection.begin=aux; + if (selection.end < selection.begin) { + aux = selection.end; + selection.end = selection.begin; + selection.begin = aux; } - selection.enabled=(selection.begin!=selection.end); + selection.enabled = (selection.begin != selection.end); } void LineEdit::select_all() { @@ -1129,15 +1100,14 @@ void LineEdit::select_all() { if (!text.length()) return; - selection.begin=0; - selection.end=text.length(); - selection.enabled=true; + selection.begin = 0; + selection.end = text.length(); + selection.enabled = true; update(); - } void LineEdit::set_editable(bool p_editable) { - editable=p_editable; + editable = p_editable; update(); } @@ -1148,7 +1118,7 @@ bool LineEdit::is_editable() const { void LineEdit::set_secret(bool p_secret) { - pass=p_secret; + pass = p_secret; update(); } bool LineEdit::is_secret() const { @@ -1158,38 +1128,38 @@ bool LineEdit::is_secret() const { void LineEdit::select(int p_from, int p_to) { - if (p_from==0 && p_to==0) { + if (p_from == 0 && p_to == 0) { selection_clear(); return; } int len = text.length(); - if (p_from<0) - p_from=0; - if (p_from>len) - p_from=len; - if (p_to<0 || p_to>len) - p_to=len; - - if (p_from>=p_to) + if (p_from < 0) + p_from = 0; + if (p_from > len) + p_from = len; + if (p_to < 0 || p_to > len) + p_to = len; + + if (p_from >= p_to) return; - selection.enabled=true; - selection.begin=p_from; - selection.end=p_to; - selection.creating=false; - selection.doubleclick=false; + selection.enabled = true; + selection.begin = p_from; + selection.end = p_to; + selection.creating = false; + selection.doubleclick = false; update(); } bool LineEdit::is_text_field() const { - return true; + return true; } void LineEdit::menu_option(int p_option) { - switch(p_option) { + switch (p_option) { case MENU_CUT: { if (editable) { cut_text(); @@ -1215,9 +1185,7 @@ void LineEdit::menu_option(int p_option) { case MENU_UNDO: { undo(); } break; - } - } PopupMenu *LineEdit::get_menu() const { @@ -1225,148 +1193,140 @@ PopupMenu *LineEdit::get_menu() const { } #ifdef TOOLS_ENABLED - void LineEdit::_editor_settings_changed() { - cursor_set_blink_enabled(EDITOR_DEF("text_editor/cursor/caret_blink", false)); - cursor_set_blink_speed(EDITOR_DEF("text_editor/cursor/caret_blink_speed", 0.65)); - } +void LineEdit::_editor_settings_changed() { + cursor_set_blink_enabled(EDITOR_DEF("text_editor/cursor/caret_blink", false)); + cursor_set_blink_speed(EDITOR_DEF("text_editor/cursor/caret_blink_speed", 0.65)); +} #endif - void LineEdit::set_expand_to_text_length(bool p_enabled) { expand_to_text_length = p_enabled; minimum_size_changed(); } -bool LineEdit::get_expand_to_text_length() const{ +bool LineEdit::get_expand_to_text_length() const { return expand_to_text_length; } - void LineEdit::_text_changed() { if (expand_to_text_length) minimum_size_changed(); - emit_signal("text_changed",text); + emit_signal("text_changed", text); _change_notify("text"); - } void LineEdit::_bind_methods() { - ClassDB::bind_method(D_METHOD("_toggle_draw_caret"),&LineEdit::_toggle_draw_caret); + ClassDB::bind_method(D_METHOD("_toggle_draw_caret"), &LineEdit::_toggle_draw_caret); #ifdef TOOLS_ENABLED - ClassDB::bind_method("_editor_settings_changed",&LineEdit::_editor_settings_changed); + ClassDB::bind_method("_editor_settings_changed", &LineEdit::_editor_settings_changed); #endif ClassDB::bind_method(D_METHOD("set_align", "align"), &LineEdit::set_align); ClassDB::bind_method(D_METHOD("get_align"), &LineEdit::get_align); - ClassDB::bind_method(D_METHOD("_gui_input"),&LineEdit::_gui_input); - ClassDB::bind_method(D_METHOD("clear"),&LineEdit::clear); - ClassDB::bind_method(D_METHOD("select_all"),&LineEdit::select_all); - ClassDB::bind_method(D_METHOD("set_text","text"),&LineEdit::set_text); - ClassDB::bind_method(D_METHOD("get_text"),&LineEdit::get_text); - ClassDB::bind_method(D_METHOD("set_placeholder","text"),&LineEdit::set_placeholder); - ClassDB::bind_method(D_METHOD("get_placeholder"),&LineEdit::get_placeholder); - ClassDB::bind_method(D_METHOD("set_placeholder_alpha","alpha"),&LineEdit::set_placeholder_alpha); - ClassDB::bind_method(D_METHOD("get_placeholder_alpha"),&LineEdit::get_placeholder_alpha); - ClassDB::bind_method(D_METHOD("set_cursor_pos","pos"),&LineEdit::set_cursor_pos); - ClassDB::bind_method(D_METHOD("get_cursor_pos"),&LineEdit::get_cursor_pos); - ClassDB::bind_method(D_METHOD("set_expand_to_text_length","enabled"),&LineEdit::set_expand_to_text_length); - ClassDB::bind_method(D_METHOD("get_expand_to_text_length"),&LineEdit::get_expand_to_text_length); - ClassDB::bind_method(D_METHOD("cursor_set_blink_enabled", "enabled"),&LineEdit::cursor_set_blink_enabled); - ClassDB::bind_method(D_METHOD("cursor_get_blink_enabled"),&LineEdit::cursor_get_blink_enabled); - ClassDB::bind_method(D_METHOD("cursor_set_blink_speed", "blink_speed"),&LineEdit::cursor_set_blink_speed); - ClassDB::bind_method(D_METHOD("cursor_get_blink_speed"),&LineEdit::cursor_get_blink_speed); - ClassDB::bind_method(D_METHOD("set_max_length","chars"),&LineEdit::set_max_length); - ClassDB::bind_method(D_METHOD("get_max_length"),&LineEdit::get_max_length); - ClassDB::bind_method(D_METHOD("append_at_cursor","text"),&LineEdit::append_at_cursor); - ClassDB::bind_method(D_METHOD("set_editable","enabled"),&LineEdit::set_editable); - ClassDB::bind_method(D_METHOD("is_editable"),&LineEdit::is_editable); - ClassDB::bind_method(D_METHOD("set_secret","enabled"),&LineEdit::set_secret); - ClassDB::bind_method(D_METHOD("is_secret"),&LineEdit::is_secret); - ClassDB::bind_method(D_METHOD("select","from","to"),&LineEdit::select,DEFVAL(0),DEFVAL(-1)); - ClassDB::bind_method(D_METHOD("menu_option","option"),&LineEdit::menu_option); - ClassDB::bind_method(D_METHOD("get_menu:PopupMenu"),&LineEdit::get_menu); - - ADD_SIGNAL( MethodInfo("text_changed", PropertyInfo( Variant::STRING, "text" )) ); - ADD_SIGNAL( MethodInfo("text_entered", PropertyInfo( Variant::STRING, "text" )) ); + ClassDB::bind_method(D_METHOD("_gui_input"), &LineEdit::_gui_input); + ClassDB::bind_method(D_METHOD("clear"), &LineEdit::clear); + ClassDB::bind_method(D_METHOD("select_all"), &LineEdit::select_all); + ClassDB::bind_method(D_METHOD("set_text", "text"), &LineEdit::set_text); + ClassDB::bind_method(D_METHOD("get_text"), &LineEdit::get_text); + ClassDB::bind_method(D_METHOD("set_placeholder", "text"), &LineEdit::set_placeholder); + ClassDB::bind_method(D_METHOD("get_placeholder"), &LineEdit::get_placeholder); + ClassDB::bind_method(D_METHOD("set_placeholder_alpha", "alpha"), &LineEdit::set_placeholder_alpha); + ClassDB::bind_method(D_METHOD("get_placeholder_alpha"), &LineEdit::get_placeholder_alpha); + ClassDB::bind_method(D_METHOD("set_cursor_pos", "pos"), &LineEdit::set_cursor_pos); + ClassDB::bind_method(D_METHOD("get_cursor_pos"), &LineEdit::get_cursor_pos); + ClassDB::bind_method(D_METHOD("set_expand_to_text_length", "enabled"), &LineEdit::set_expand_to_text_length); + ClassDB::bind_method(D_METHOD("get_expand_to_text_length"), &LineEdit::get_expand_to_text_length); + ClassDB::bind_method(D_METHOD("cursor_set_blink_enabled", "enabled"), &LineEdit::cursor_set_blink_enabled); + ClassDB::bind_method(D_METHOD("cursor_get_blink_enabled"), &LineEdit::cursor_get_blink_enabled); + ClassDB::bind_method(D_METHOD("cursor_set_blink_speed", "blink_speed"), &LineEdit::cursor_set_blink_speed); + ClassDB::bind_method(D_METHOD("cursor_get_blink_speed"), &LineEdit::cursor_get_blink_speed); + ClassDB::bind_method(D_METHOD("set_max_length", "chars"), &LineEdit::set_max_length); + ClassDB::bind_method(D_METHOD("get_max_length"), &LineEdit::get_max_length); + ClassDB::bind_method(D_METHOD("append_at_cursor", "text"), &LineEdit::append_at_cursor); + ClassDB::bind_method(D_METHOD("set_editable", "enabled"), &LineEdit::set_editable); + ClassDB::bind_method(D_METHOD("is_editable"), &LineEdit::is_editable); + ClassDB::bind_method(D_METHOD("set_secret", "enabled"), &LineEdit::set_secret); + ClassDB::bind_method(D_METHOD("is_secret"), &LineEdit::is_secret); + ClassDB::bind_method(D_METHOD("select", "from", "to"), &LineEdit::select, DEFVAL(0), DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("menu_option", "option"), &LineEdit::menu_option); + ClassDB::bind_method(D_METHOD("get_menu:PopupMenu"), &LineEdit::get_menu); + + ADD_SIGNAL(MethodInfo("text_changed", PropertyInfo(Variant::STRING, "text"))); + ADD_SIGNAL(MethodInfo("text_entered", PropertyInfo(Variant::STRING, "text"))); BIND_CONSTANT(ALIGN_LEFT); BIND_CONSTANT(ALIGN_CENTER); BIND_CONSTANT(ALIGN_RIGHT); BIND_CONSTANT(ALIGN_FILL); - BIND_CONSTANT( MENU_CUT ); - BIND_CONSTANT( MENU_COPY ); - BIND_CONSTANT( MENU_PASTE ); - BIND_CONSTANT( MENU_CLEAR ); - BIND_CONSTANT( MENU_SELECT_ALL ); - BIND_CONSTANT( MENU_UNDO ); - BIND_CONSTANT( MENU_MAX ); + BIND_CONSTANT(MENU_CUT); + BIND_CONSTANT(MENU_COPY); + BIND_CONSTANT(MENU_PASTE); + BIND_CONSTANT(MENU_CLEAR); + BIND_CONSTANT(MENU_SELECT_ALL); + BIND_CONSTANT(MENU_UNDO); + BIND_CONSTANT(MENU_MAX); - ADD_PROPERTYNZ( PropertyInfo( Variant::STRING, "text" ), "set_text","get_text") ; + ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "text"), "set_text", "get_text"); ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); - ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "max_length" ), "set_max_length","get_max_length") ; - ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "editable" ), "set_editable","is_editable") ; - ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "secret" ), "set_secret","is_secret") ; - ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "expand_to_len" ), "set_expand_to_text_length","get_expand_to_text_length") ; - ADD_PROPERTY( PropertyInfo( Variant::INT,"focus_mode", PROPERTY_HINT_ENUM, "None,Click,All" ), "set_focus_mode", "get_focus_mode") ; - ADD_GROUP("Placeholder","placeholder_"); - ADD_PROPERTYNZ( PropertyInfo( Variant::STRING, "placeholder_text" ), "set_placeholder","get_placeholder") ; - ADD_PROPERTYNZ( PropertyInfo( Variant::REAL, "placeholder_alpha",PROPERTY_HINT_RANGE,"0,1,0.001" ), "set_placeholder_alpha","get_placeholder_alpha") ; - ADD_GROUP("Caret","caret_"); + ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "max_length"), "set_max_length", "get_max_length"); + ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable"); + ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "secret"), "set_secret", "is_secret"); + ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "expand_to_len"), "set_expand_to_text_length", "get_expand_to_text_length"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_focus_mode", "get_focus_mode"); + ADD_GROUP("Placeholder", "placeholder_"); + ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "placeholder_text"), "set_placeholder", "get_placeholder"); + ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "placeholder_alpha", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_placeholder_alpha", "get_placeholder_alpha"); + ADD_GROUP("Caret", "caret_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_blink"), "cursor_set_blink_enabled", "cursor_get_blink_enabled"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "caret_blink_speed",PROPERTY_HINT_RANGE,"0.1,10,0.1"), "cursor_set_blink_speed","cursor_get_blink_speed") ; + ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "caret_blink_speed", PROPERTY_HINT_RANGE, "0.1,10,0.1"), "cursor_set_blink_speed", "cursor_get_blink_speed"); } LineEdit::LineEdit() { align = ALIGN_LEFT; cached_width = 0; - cursor_pos=0; - window_pos=0; - window_has_focus=true; + cursor_pos = 0; + window_pos = 0; + window_has_focus = true; max_length = 0; - pass=false; - placeholder_alpha=0.6; + pass = false; + placeholder_alpha = 0.6; selection_clear(); - set_focus_mode( FOCUS_ALL ); - editable=true; + set_focus_mode(FOCUS_ALL); + editable = true; set_default_cursor_shape(CURSOR_IBEAM); set_mouse_filter(MOUSE_FILTER_STOP); - draw_caret=true; - caret_blink_enabled=false; + draw_caret = true; + caret_blink_enabled = false; caret_blink_timer = memnew(Timer); add_child(caret_blink_timer); caret_blink_timer->set_wait_time(0.65); - caret_blink_timer->connect("timeout", this,"_toggle_draw_caret"); + caret_blink_timer->connect("timeout", this, "_toggle_draw_caret"); cursor_set_blink_enabled(false); - menu = memnew( PopupMenu ); + menu = memnew(PopupMenu); add_child(menu); - menu->add_item(TTR("Cut"),MENU_CUT,KEY_MASK_CMD|KEY_X); - menu->add_item(TTR("Copy"),MENU_COPY,KEY_MASK_CMD|KEY_C); - menu->add_item(TTR("Paste"),MENU_PASTE,KEY_MASK_CMD|KEY_V); + menu->add_item(TTR("Cut"), MENU_CUT, KEY_MASK_CMD | KEY_X); + menu->add_item(TTR("Copy"), MENU_COPY, KEY_MASK_CMD | KEY_C); + menu->add_item(TTR("Paste"), MENU_PASTE, KEY_MASK_CMD | KEY_V); menu->add_separator(); - menu->add_item(TTR("Select All"),MENU_SELECT_ALL,KEY_MASK_CMD|KEY_A); - menu->add_item(TTR("Clear"),MENU_CLEAR); + menu->add_item(TTR("Select All"), MENU_SELECT_ALL, KEY_MASK_CMD | KEY_A); + menu->add_item(TTR("Clear"), MENU_CLEAR); menu->add_separator(); - menu->add_item(TTR("Undo"),MENU_UNDO,KEY_MASK_CMD|KEY_Z); - menu->connect("id_pressed",this,"menu_option"); - expand_to_text_length=false; - - + menu->add_item(TTR("Undo"), MENU_UNDO, KEY_MASK_CMD | KEY_Z); + menu->connect("id_pressed", this, "menu_option"); + expand_to_text_length = false; } LineEdit::~LineEdit() { - - } - |