X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-field-impl.cpp;h=2f4ef60957a53b7e82fcf2281dbc4beca915a78a;hb=79f571c4268280bc8384dae746193742f713e745;hp=fe01e4630893686d4f25438caee1e50d85f20c70;hpb=6709fdc8088f46d6a6bd082d5c9a9a8047a8faa4;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index fe01e46..2f4ef60 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -201,6 +201,28 @@ Toolkit::TextField::InputStyle::Mask ConvertInputStyle(Text::InputStyle::Mask in return fieldInputStyleMask; } +bool IsHiddenInput(Toolkit::TextField textField) +{ + Property::Map hiddenInputSettings = textField.GetProperty(Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS); + auto mode = hiddenInputSettings.Find(Toolkit::HiddenInput::Property::MODE); + if (mode && (mode->Get() != Toolkit::HiddenInput::Mode::HIDE_NONE)) + { + return true; + } + return false; +} + +char GetSubstituteCharacter(Toolkit::TextField textField) +{ + Property::Map hiddenInputSettings = textField.GetProperty(Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS); + auto substChar = hiddenInputSettings.Find(Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER); + if (substChar) + { + return static_cast(substChar->Get()); + } + return STAR; +} + } // namespace Toolkit::TextField TextField::New() @@ -441,6 +463,11 @@ DevelTextField::SelectionClearedSignalType& TextField::SelectionClearedSignal() return mSelectionClearedSignal; } +void TextField::OnAccessibilityStatusChanged() +{ + CommonTextUtils::SynchronizeTextAnchorsInParent(Self(), mController, mAnchorActors); +} + void TextField::OnInitialize() { Actor self = Self(); @@ -519,6 +546,9 @@ void TextField::OnInitialize() return std::unique_ptr( new AccessibleImpl(actor, Dali::Accessibility::Role::ENTRY)); }); + + Accessibility::Bridge::EnabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged); + Accessibility::Bridge::DisabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged); } void TextField::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) @@ -680,7 +710,7 @@ Text::ControllerPtr TextField::GetTextController() void TextField::RenderText(Text::Controller::UpdateTextType updateTextType) { - CommonTextUtils::RenderText(Self(), mRenderer, mController, mDecorator, mAlignmentOffset, mRenderableActor, mBackgroundActor, mStencil, mClippingDecorationActors, updateTextType); + CommonTextUtils::RenderText(Self(), mRenderer, mController, mDecorator, mAlignmentOffset, mRenderableActor, mBackgroundActor, mStencil, mClippingDecorationActors, mAnchorActors, updateTextType); } void TextField::OnKeyInputFocusGained() @@ -1101,6 +1131,11 @@ TextField::~TextField() std::string TextField::AccessibleImpl::GetName() { auto self = Toolkit::TextField::DownCast(Self()); + if (IsHiddenInput(self)) + { + return {}; + } + return self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); } @@ -1118,7 +1153,10 @@ std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOff { return {}; } - + if(IsHiddenInput(self)) + { + return std::string(endOffset - startOffset, GetSubstituteCharacter(self)); + } return text.substr(startOffset, endOffset - startOffset); } @@ -1156,11 +1194,18 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset( size_t offset, Dali::Accessibility::TextBoundary boundary) { auto self = Toolkit::TextField::DownCast(Self()); + auto range = Dali::Accessibility::Range{}; + + if(IsHiddenInput(self)) + { + // Returning empty object, as there is no possibility to parse the textfield + // when its content is hidden. + return range; + } + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); auto textSize = text.size(); - auto range = Dali::Accessibility::Range{}; - switch(boundary) { case Dali::Accessibility::TextBoundary::CHARACTER: @@ -1252,13 +1297,21 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetRangeOfSelection(size_t return {}; } - auto self = Toolkit::TextField::DownCast(Self()); - auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); - std::string value{}; - controller->RetrieveSelection(value); + auto self = Toolkit::TextField::DownCast(Self()); + auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); auto indices = controller->GetSelectionIndexes(); - return {static_cast(indices.first), static_cast(indices.second), value}; + auto startOffset = static_cast(indices.first); + auto endOffset = static_cast(indices.second); + + if (IsHiddenInput(self)) + { + return {startOffset, endOffset, std::string(endOffset - startOffset, GetSubstituteCharacter(self))}; + } + + std::string value{}; + controller->RetrieveSelection(value); + return {startOffset, endOffset, value}; } bool TextField::AccessibleImpl::RemoveSelection(size_t selectionIndex) @@ -1369,6 +1422,30 @@ bool TextField::AccessibleImpl::SetTextContents(std::string newContents) return true; } +int32_t TextField::AccessibleImpl::GetLinkCount() const +{ + auto self = Toolkit::TextField::DownCast(Self()); + return Dali::Toolkit::GetImpl(self).mAnchorActors.size(); +} + +Accessibility::Hyperlink* TextField::AccessibleImpl::GetLink(int32_t linkIndex) const +{ + if(linkIndex < 0 || linkIndex >= GetLinkCount()) + { + return nullptr; + } + auto self = Toolkit::TextField::DownCast(Self()); + auto anchorActor = Dali::Toolkit::GetImpl(self).mAnchorActors[linkIndex]; + return dynamic_cast(Dali::Accessibility::Accessible::Get(anchorActor)); +} + +int32_t TextField::AccessibleImpl::GetLinkIndex(int32_t characterOffset) const +{ + auto self = Toolkit::TextField::DownCast(Self()); + auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); + return controller->GetAnchorIndex(static_cast(characterOffset)); +} + } // namespace Internal } // namespace Toolkit