DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "anchorClicked", SIGNAL_ANCHOR_CLICKED )
DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "inputFiltered", SIGNAL_INPUT_FILTERED )
DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "cursorPositionChanged", SIGNAL_CURSOR_POSITION_CHANGED)
+DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "selectionChanged", SIGNAL_SELECTION_CHANGED )
+DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "selectionCleared", SIGNAL_SELECTION_CLEARED )
DALI_TYPE_REGISTRATION_END()
// clang-format on
return range;
}
+string TextField::CopyText()
+{
+ string copiedText = "";
+ if(mController && mController->IsShowingRealText())
+ {
+ copiedText = mController->CopyText();
+ }
+ return copiedText;
+}
+
+string TextField::CutText()
+{
+ string cutText = "";
+ if(mController && mController->IsShowingRealText())
+ {
+ cutText = mController->CutText();
+ }
+ return cutText;
+}
+
+void TextField::PasteText()
+{
+ if(mController)
+ {
+ SetKeyInputFocus(); //Giving focus to the field that was passed to the PasteText in case the passed field (current field) doesn't have focus.
+ mController->PasteText();
+ }
+}
+
InputMethodContext TextField::GetInputMethodContext()
{
return mInputMethodContext;
fieldImpl.InputFilteredSignal().Connect(tracker, functor);
}
}
+ else if(0 == strcmp(signalName.c_str(), SIGNAL_SELECTION_CHANGED))
+ {
+ if(field)
+ {
+ Internal::TextField& fieldImpl(GetImpl(field));
+ fieldImpl.SelectionChangedSignal().Connect(tracker, functor);
+ }
+ }
+ else if(0 == strcmp(signalName.c_str(), SIGNAL_SELECTION_CLEARED))
+ {
+ if(field)
+ {
+ Internal::TextField& fieldImpl(GetImpl(field));
+ fieldImpl.SelectionClearedSignal().Connect(tracker, functor);
+ }
+ }
else
{
// signalName does not match any signal
return mInputFilteredSignal;
}
+DevelTextField::SelectionChangedSignalType& TextField::SelectionChangedSignal()
+{
+ return mSelectionChangedSignal;
+}
+
+DevelTextField::SelectionClearedSignalType& TextField::SelectionClearedSignal()
+{
+ return mSelectionClearedSignal;
+}
+
void TextField::OnInitialize()
{
Actor self = Self();
// Forward input events to controller
EnableGestureDetection(static_cast<GestureType::Value>(GestureType::TAP | GestureType::PAN | GestureType::LONG_PRESS));
GetTapGestureDetector().SetMaximumTapsRequired(2);
+ GetTapGestureDetector().ReceiveAllTapEvents(true);
self.TouchedSignal().Connect(this, &TextField::OnTouched);
EmitCursorPositionChangedSignal();
}
+ if(mSelectionChanged)
+ {
+ EmitSelectionChangedSignal();
+ }
+
+ if(mSelectionCleared)
+ {
+ EmitSelectionClearedSignal();
+ }
+
// The text-field 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.
mInputFilteredSignal.Emit(handle, type);
}
+void TextField::EmitSelectionChangedSignal()
+{
+ Dali::Toolkit::TextField handle(GetOwner());
+ mSelectionChangedSignal.Emit(handle, mOldSelectionStart, mOldSelectionEnd);
+ mSelectionChanged = false;
+}
+
+void TextField::EmitSelectionClearedSignal()
+{
+ Dali::Toolkit::TextField handle(GetOwner());
+ mSelectionClearedSignal.Emit(handle);
+ mSelectionCleared = false;
+}
+
+void TextField::SelectionChanged(uint32_t oldStart, uint32_t oldEnd, uint32_t newStart, uint32_t newEnd)
+{
+ if(((oldStart != newStart) || (oldEnd != newEnd)) && !mSelectionChanged)
+ {
+ if(newStart == newEnd)
+ {
+ mSelectionCleared = true;
+ }
+
+ mSelectionChanged = true;
+ mOldSelectionStart = oldStart;
+ mOldSelectionEnd = oldEnd;
+
+ if(mOldSelectionStart > mOldSelectionEnd)
+ {
+ //swap
+ uint32_t temp = mOldSelectionStart;
+ mOldSelectionStart = mOldSelectionEnd;
+ mOldSelectionEnd = temp;
+ }
+ }
+}
+
void TextField::AddDecoration(Actor& actor, bool needsClipping)
{
if(actor)
mExceedPolicy(Dali::Toolkit::TextField::EXCEED_POLICY_CLIP),
mHasBeenStaged(false),
mTextChanged(false),
- mCursorPositionChanged(false)
+ mCursorPositionChanged(false),
+ mSelectionChanged(false),
+ mSelectionCleared(false),
+ mOldPosition(0u),
+ mOldSelectionStart(0u),
+ mOldSelectionEnd(0u)
{
}