| 673 | } |
| 674 | |
| 675 | void TextFieldEx::handleDeleteKeyEvent() |
| 676 | { |
| 677 | if (!_editable || !this->_enabled || 0 == _charCount) |
| 678 | { |
| 679 | axbeep(0); |
| 680 | return; |
| 681 | } |
| 682 | |
| 683 | size_t len = _inputText.length(); |
| 684 | if (0 == len || _insertPosUtf8 == _charCount) |
| 685 | { |
| 686 | axbeep(0); |
| 687 | // there is no string |
| 688 | // __updateCursorPosition(); |
| 689 | return; |
| 690 | } |
| 691 | |
| 692 | // get the delete byte number |
| 693 | size_t deleteLen = 1; // default, erase 1 byte |
| 694 | |
| 695 | while ((_inputText.length() > _insertPos + deleteLen) && 0x80 == (0xC0 & _inputText.at(_insertPos + deleteLen))) |
| 696 | { |
| 697 | ++deleteLen; |
| 698 | } |
| 699 | |
| 700 | // if (_delegate && _delegate->onTextFieldDeleteBackward(this, _inputText.c_str() + len - deleteLen, |
| 701 | // static_cast<int>(deleteLen))) |
| 702 | //{ |
| 703 | // // delegate doesn't wan't to delete backwards |
| 704 | // return; |
| 705 | // } |
| 706 | |
| 707 | // if all text deleted, show placeholder string |
| 708 | if (len <= deleteLen) |
| 709 | { |
| 710 | _inputText.clear(); |
| 711 | _charCount = 0; |
| 712 | _renderLabel->setTextColor(_colorSpaceHolder); |
| 713 | _renderLabel->setString(_placeHolder); |
| 714 | |
| 715 | __updateCursorPosition(); |
| 716 | |
| 717 | // this->contentDirty = true; |
| 718 | |
| 719 | if (this->onTextModify) |
| 720 | this->onTextModify(); |
| 721 | return; |
| 722 | } |
| 723 | |
| 724 | // set new input text |
| 725 | std::string text = _inputText; // (inputText.c_str(), len - deleteLen); |
| 726 | text.erase(_insertPos, deleteLen); |
| 727 | |
| 728 | // __moveCursor(-1); |
| 729 | |
| 730 | this->setString(text); |
| 731 | |
| 732 | if (this->onTextModify) |