X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=base%2Fdali-toolkit%2Finternal%2Fcontrols%2Ftext-input%2Ftext-input-impl.cpp;h=7b85230d2e1b2ad613eec9daf84890a016b94068;hp=5ce0daf08d861b10017229fe0650f546bb93bfc1;hb=d5e3ed5f5b1c8fdba3ae97ead8729620f54b3836;hpb=266dbd296834e8fc8723c9c3f3e62a9abd94bcdd diff --git a/base/dali-toolkit/internal/controls/text-input/text-input-impl.cpp b/base/dali-toolkit/internal/controls/text-input/text-input-impl.cpp index 5ce0daf..7b85230 100644 --- a/base/dali-toolkit/internal/controls/text-input/text-input-impl.cpp +++ b/base/dali-toolkit/internal/controls/text-input/text-input-impl.cpp @@ -1,18 +1,19 @@ -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ #include @@ -269,7 +270,7 @@ Dali::Toolkit::TextInput TextInput::New() } TextInput::TextInput() -:ControlImpl( true ), +:Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS | REQUIRES_STYLE_CHANGE_SIGNALS ) ), mState( StateEdit ), mStyledText(), mInputStyle(), @@ -443,6 +444,8 @@ void TextInput::SetText(const std::string& initialText) RemoveHighlight(); DrawCursor(); + + EmitTextModified(); } void TextInput::SetText( const MarkupProcessor::StyledTextArray& styleText ) @@ -488,6 +491,8 @@ void TextInput::SetText( const MarkupProcessor::StyledTextArray& styleText ) Toolkit::Alignment::VerticalTop ) ); mDisplayedTextView.SetLineJustification( leftToRight ? Toolkit::TextView::Left : Toolkit::TextView::Right); } + + EmitTextModified(); } void TextInput::SetMaxCharacterLength(std::size_t maxChars) @@ -535,6 +540,11 @@ Toolkit::TextInput::StyleChangedSignalV2& TextInput::StyleChangedSignal() return mStyleChangedSignalV2; } +Toolkit::TextInput::TextModifiedSignalType& TextInput::TextModifiedSignal() +{ + return mTextModifiedSignal; +} + Toolkit::TextInput::MaxInputCharactersReachedSignalV2& TextInput::MaxInputCharactersReachedSignal() { return mMaxInputCharactersReachedSignalV2; @@ -1044,6 +1054,7 @@ void TextInput::OnKeyInputFocusLost() RemovePreEditStyle(); const std::size_t numberOfCharactersDeleted = DeletePreEdit(); InsertAt( mPreEditString, mPreEditStartPosition, numberOfCharactersDeleted ); + EmitTextModified(); } ImfManager imfManager = ImfManager::Get(); @@ -1622,7 +1633,6 @@ bool TextInput::OnPopupButtonPressed( Toolkit::Button button ) ShowGrabHandleAndSetVisibility( false ); - HidePopup(); } else if(name == OPTION_CLIPBOARD) @@ -1714,7 +1724,7 @@ bool TextInput::OnKeyDownEvent(const KeyEvent& event) mPreEditFlag = true; mIgnoreCommitFlag = false; } - + EmitTextModified(); update = true; } else @@ -1739,7 +1749,7 @@ bool TextInput::OnKeyDownEvent(const KeyEvent& event) { mCommitByKeyInput = true; } - + EmitTextModified(); update = true; } // space else if (keyName == "BackSpace") @@ -1758,6 +1768,7 @@ bool TextInput::OnKeyDownEvent(const KeyEvent& event) update = true; } } + EmitTextModified(); } // BackSpace else if (keyName == "Right") { @@ -1784,6 +1795,7 @@ bool TextInput::OnKeyDownEvent(const KeyEvent& event) // Received key String mCursorPosition = mCursorPosition + InsertAt( Text( keyString ), mCursorPosition, 0 ); update = true; + EmitTextModified(); } } @@ -2037,7 +2049,7 @@ void TextInput::CreateTextViewActor() mDisplayedTextView.SetLineJustification( Toolkit::TextView::Left ); mDisplayedTextView.SetTextAlignment( static_cast( Toolkit::Alignment::HorizontalLeft | Toolkit::Alignment::VerticalTop ) ); mDisplayedTextView.SetPosition( Vector3( 0.0f, 0.0f, DISPLAYED_TEXT_VIEW_Z_OFFSET ) ); - mDisplayedTextView.SetSizePolicy( Control::Fixed, Control::Fixed ); + mDisplayedTextView.SetSizePolicy( Toolkit::Control::Fixed, Toolkit::Control::Fixed ); mDisplayedTextView.ScrolledSignal().Connect( this, &TextInput::OnTextViewScrolled ); @@ -2234,6 +2246,8 @@ ImfManager::ImfCallbackData TextInput::ImfEventReceived( Dali::ImfManager& imfMa mCursorPosition = toDelete; mNumberOfSurroundingCharactersDeleted = numberOfCharacters; + EmitTextModified(); + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfEventReceived - deleteSurrounding post-delete range mCursorPosition[%u] \n", mCursorPosition); break; } @@ -2325,6 +2339,7 @@ bool TextInput::PreEditReceived(const std::string& keyString, std::size_t cursor mDisplayedTextView.RemoveTextFrom( mPreEditStartPosition, numberOfCharactersToReplace ); } GetTextLayoutInfo(); + EmitTextModified(); } else { @@ -2334,6 +2349,7 @@ bool TextInput::PreEditReceived(const std::string& keyString, std::size_t cursor mCursorPosition = mPreEditStartPosition + std::min( cursorOffset, mPreEditLength ); ApplyPreEditStyle( mPreEditStartPosition, mPreEditLength ); DALI_LOG_INFO(gLogFilter, Debug::General, "PreEditReceived mCursorPosition[%u] \n", mCursorPosition); + EmitTextModified(); } // cursor update to keyboard is not done here as the keyboard knows the cursor position and provides the 'cursorOffset'. DrawCursor(); @@ -2353,9 +2369,9 @@ bool TextInput::PreEditReceived(const std::string& keyString, std::size_t cursor mCursorPosition = mPreEditStartPosition + std::min( cursorOffset, mPreEditLength ); ApplyPreEditStyle( mPreEditStartPosition, mPreEditLength ); DALI_LOG_INFO(gLogFilter, Debug::General, "PreEditReceived mCursorPosition[%u] mPreEditStartPosition[%u]\n", mCursorPosition, mPreEditStartPosition); - // cursor update to keyboard is not done here as the keyboard knows the cursor position and provides the 'cursorOffset'. DrawCursor(); + EmitTextModified(); } else { @@ -2416,6 +2432,8 @@ bool TextInput::CommitReceived(const std::string& keyString ) } } + EmitTextModified(); + if ( mSelectTextOnCommit ) { SelectText(mRequestedSelection.mStartOfSelection, mRequestedSelection.mEndOfSelection ); @@ -2437,6 +2455,7 @@ bool TextInput::CommitReceived(const std::string& keyString ) mCursorPosition = mCursorPosition + InsertAt( Text( keyString ), mCursorPosition, mNumberOfSurroundingCharactersDeleted ); update = true; mNumberOfSurroundingCharactersDeleted = 0; + EmitTextModified(); } else { @@ -5092,11 +5111,18 @@ void TextInput::GetTextLayoutInfo() void TextInput::EmitStyleChangedSignal() { // emit signal if input style changes. - Toolkit::TextInput handle( GetOwner() ); mStyleChangedSignalV2.Emit( handle, mInputStyle ); } +void TextInput::EmitTextModified() +{ + // emit signal when text changes. + Toolkit::TextInput handle( GetOwner() ); + mTextModifiedSignal.Emit( handle ); +} + + void TextInput::EmitMaxInputCharactersReachedSignal() { // emit signal if max characters is reached during text input.