X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-editor-impl.cpp;h=7a3b4bad17b666009a054c1c526cedf2af9ad598;hb=0f19aa986501f6b51de786a08b1fcfda00b849d8;hp=090bf9ac5278ea66a06042bde9f1649f6243da78;hpb=ac95292b53ca62c34114cde6e78e8595909bcb9c;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index 090bf9a..7a3b4ba 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -159,7 +159,7 @@ DALI_SIGNAL_REGISTRATION(Toolkit, TextEditor, "maxLengthReached", SIGNAL_MA DALI_SIGNAL_REGISTRATION(Toolkit, TextEditor, "anchorClicked", SIGNAL_ANCHOR_CLICKED ) DALI_SIGNAL_REGISTRATION(Toolkit, TextEditor, "inputFiltered", SIGNAL_INPUT_FILTERED ) DALI_SIGNAL_REGISTRATION(Toolkit, TextEditor, "cursorPositionChanged", SIGNAL_CURSOR_POSITION_CHANGED) - +DALI_SIGNAL_REGISTRATION(Toolkit, TextEditor, "selectionChanged", SIGNAL_SELECTION_CHANGED ) DALI_TYPE_REGISTRATION_END() // clang-format on @@ -1263,6 +1263,35 @@ void TextEditor::SelectText(const uint32_t start, const uint32_t end) } } +string TextEditor::CopyText() +{ + string copiedText = ""; + if(mController && mController->IsShowingRealText()) + { + copiedText = mController->CopyText(); + } + return copiedText; +} + +string TextEditor::CutText() +{ + string cutText = ""; + if(mController && mController->IsShowingRealText()) + { + cutText = mController->CutText(); + } + return cutText; +} + +void TextEditor::PasteText() +{ + if(mController) + { + SetKeyInputFocus(); //Giving focus to the editor that was passed to the PasteText in case the passed editor (current editor) doesn't have focus. + mController->PasteText(); + } +} + void TextEditor::ScrollBy(Vector2 scroll) { if(mController && mController->IsShowingRealText()) @@ -1324,6 +1353,11 @@ DevelTextEditor::InputFilteredSignalType& TextEditor::InputFilteredSignal() return mInputFilteredSignal; } +DevelTextEditor::SelectionChangedSignalType& TextEditor::SelectionChangedSignal() +{ + return mSelectionChangedSignal; +} + Text::ControllerPtr TextEditor::GetTextController() { return mController; @@ -1376,6 +1410,14 @@ bool TextEditor::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* editorImpl.InputFilteredSignal().Connect(tracker, functor); } } + else if(0 == strcmp(signalName.c_str(), SIGNAL_SELECTION_CHANGED)) + { + if(editor) + { + Internal::TextEditor& editorImpl(GetImpl(editor)); + editorImpl.SelectionChangedSignal().Connect(tracker, functor); + } + } else { // signalName does not match any signal @@ -1613,6 +1655,11 @@ void TextEditor::OnRelayout(const Vector2& size, RelayoutContainer& container) EmitCursorPositionChangedSignal(); } + if(mSelectionChanged) + { + EmitSelectionChangedSignal(); + } + // The text-editor emits signals when the input style changes. These changes of style are // detected during the relayout process (size negotiation), i.e after the cursor has been moved. Signals // can't be emitted during the size negotiation as the callbacks may update the UI. @@ -1985,6 +2032,31 @@ void TextEditor::InputFiltered(Toolkit::InputFilter::Property::Type type) mInputFilteredSignal.Emit(handle, type); } +void TextEditor::EmitSelectionChangedSignal() +{ + Dali::Toolkit::TextEditor handle(GetOwner()); + mSelectionChangedSignal.Emit(handle, mOldSelectionStart, mOldSelectionEnd); + mSelectionChanged = false; +} + +void TextEditor::SelectionChanged(uint32_t oldStart, uint32_t oldEnd, uint32_t newStart, uint32_t newEnd) +{ + if(((oldStart != newStart) || (oldEnd != newEnd)) && !mSelectionChanged) + { + mSelectionChanged = true; + mOldSelectionStart = oldStart; + mOldSelectionEnd = oldEnd; + + if(mOldSelectionStart > mOldSelectionEnd) + { + //swap + uint32_t temp = mOldSelectionStart; + mOldSelectionStart = mOldSelectionEnd; + mOldSelectionEnd = temp; + } + } +} + void TextEditor::AddDecoration(Actor& actor, bool needsClipping) { if(actor) @@ -2263,7 +2335,8 @@ TextEditor::TextEditor() mScrollBarEnabled(false), mScrollStarted(false), mTextChanged(false), - mCursorPositionChanged(false) + mCursorPositionChanged(false), + mSelectionChanged(false) { }