[AT-SPI] Add SetTextContents, InsertText and DeleteText 57/256957/7
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Thu, 15 Apr 2021 09:27:12 +0000 (11:27 +0200)
committerArtur Świgoń <a.swigon@samsung.com>
Fri, 28 May 2021 13:42:54 +0000 (15:42 +0200)
Extend at-spi implementation for EditableText widgets.

Change-Id: I9669eb4f9fb4c34c3d0a1cd8ed5e751066ce98d7

automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp
dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp
dali-toolkit/internal/controls/text-controls/text-editor-impl.h
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.h

index f3d97a9..dabd012 100644 (file)
@@ -559,6 +559,13 @@ int UtcDaliAccessibilityTextField(void)
   DALI_TEST_EQUALS( text->SetSelection( 1, 0, 1 ), false, TEST_LOCATION );
   DALI_TEST_EQUALS( text->RemoveSelection( 1 ), false, TEST_LOCATION );
 
+  DALI_TEST_EQUALS(editabletext->SetTextContents("adef"), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(editabletext->InsertText(1, "bc"), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(text->GetText(0, 6), "abcdef", TEST_LOCATION);
+  DALI_TEST_EQUALS(editabletext->DeleteText(5, 1), false, TEST_LOCATION);
+  DALI_TEST_EQUALS(editabletext->DeleteText(1, 5), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(text->GetText(0, 2), "af", TEST_LOCATION);
+
   Dali::Accessibility::TestEnableSC( false );
 
   END_TEST;
@@ -608,6 +615,13 @@ int UtcDaliAccessibilityTextEditor(void)
   DALI_TEST_EQUALS( text->SetSelection( 1, 0, 1 ), false, TEST_LOCATION );
   DALI_TEST_EQUALS( text->RemoveSelection( 1 ), false, TEST_LOCATION );
 
+  DALI_TEST_EQUALS(editabletext->SetTextContents("adef"), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(editabletext->InsertText(1, "bc"), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(text->GetText(0, 6), "abcdef", TEST_LOCATION);
+  DALI_TEST_EQUALS(editabletext->DeleteText(5, 1), false, TEST_LOCATION);
+  DALI_TEST_EQUALS(editabletext->DeleteText(1, 5), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(text->GetText(0, 2), "af", TEST_LOCATION);
+
   Dali::Accessibility::TestEnableSC( false );
 
   END_TEST;
index 48e0118..be18ec5 100644 (file)
@@ -2261,7 +2261,22 @@ bool TextEditor::AccessibleImpl::CutText(size_t startPosition,
   Dali::Toolkit::GetImpl(slf).getController()->CopyStringToClipboard(txt.substr(startPosition, endPosition - startPosition));
 
   slf.SetProperty(Toolkit::TextEditor::Property::TEXT,
-                  txt.substr(0, startPosition) + txt.substr(endPosition - startPosition, txt.size()));
+                  txt.substr(0, startPosition) + txt.substr(endPosition));
+
+  return true;
+}
+
+bool TextEditor::AccessibleImpl::DeleteText(size_t startPosition,
+                                            size_t endPosition)
+{
+  if(endPosition <= startPosition)
+    return false;
+
+  auto slf = Toolkit::TextEditor::DownCast(Self());
+  auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
+
+  slf.SetProperty(Toolkit::TextEditor::Property::TEXT,
+                  txt.substr(0, startPosition) + txt.substr(endPosition));
 
   return true;
 }
@@ -2283,6 +2298,26 @@ Dali::Accessibility::States TextEditor::AccessibleImpl::CalculateStates()
   return states;
 }
 
+bool TextEditor::AccessibleImpl::InsertText(size_t startPosition,
+                                            std::string text)
+{
+  auto slf = Toolkit::TextEditor::DownCast(Self());
+  auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
+
+  txt.insert(startPosition, text);
+
+  slf.SetProperty(Toolkit::TextEditor::Property::TEXT, std::move(txt));
+
+  return true;
+}
+
+bool TextEditor::AccessibleImpl::SetTextContents(std::string newContents)
+{
+  auto slf = Toolkit::TextEditor::DownCast(Self());
+  slf.SetProperty(Toolkit::TextEditor::Property::TEXT, std::move(newContents));
+  return true;
+}
+
 } // namespace Internal
 
 } // namespace Toolkit
index d0609b6..eb3bae4 100644 (file)
@@ -442,6 +442,9 @@ private: // Data
     bool                  CopyText(size_t startPosition, size_t endPosition) override;
     bool                  CutText(size_t startPosition, size_t endPosition) override;
     Accessibility::States CalculateStates() override;
+    bool                  InsertText(size_t startPosition, std::string text) override;
+    bool                  SetTextContents(std::string newContents) override;
+    bool                  DeleteText(size_t startPosition, size_t endPosition) override;
   };
 };
 
index c0d7903..4e5cd9c 100644 (file)
@@ -2128,7 +2128,22 @@ bool TextField::AccessibleImpl::CutText(size_t startPosition,
   Dali::Toolkit::GetImpl(slf).getController()->CopyStringToClipboard(txt.substr(startPosition, endPosition - startPosition));
 
   slf.SetProperty(Toolkit::TextField::Property::TEXT,
-                  txt.substr(0, startPosition) + txt.substr(endPosition - startPosition, txt.size()));
+                  txt.substr(0, startPosition) + txt.substr(endPosition));
+
+  return true;
+}
+
+bool TextField::AccessibleImpl::DeleteText(size_t startPosition,
+                                           size_t endPosition)
+{
+  if(endPosition <= startPosition)
+    return false;
+
+  auto slf = Toolkit::TextField::DownCast(Self());
+  auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
+
+  slf.SetProperty(Toolkit::TextField::Property::TEXT,
+                  txt.substr(0, startPosition) + txt.substr(endPosition));
 
   return true;
 }
@@ -2151,6 +2166,26 @@ Dali::Accessibility::States TextField::AccessibleImpl::CalculateStates()
   return states;
 }
 
+bool TextField::AccessibleImpl::InsertText(size_t startPosition,
+                                            std::string text)
+{
+  auto slf = Toolkit::TextField::DownCast(Self());
+  auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
+
+  txt.insert(startPosition, text);
+
+  slf.SetProperty(Toolkit::TextField::Property::TEXT, std::move(txt));
+
+  return true;
+}
+
+bool TextField::AccessibleImpl::SetTextContents(std::string newContents)
+{
+  auto slf = Toolkit::TextField::DownCast(Self());
+  slf.SetProperty(Toolkit::TextField::Property::TEXT, std::move(newContents));
+  return true;
+}
+
 } // namespace Internal
 
 } // namespace Toolkit
index 670b81c..c76f05a 100644 (file)
@@ -398,6 +398,9 @@ protected:
     bool                  CopyText(size_t startPosition, size_t endPosition) override;
     bool                  CutText(size_t startPosition, size_t endPosition) override;
     Accessibility::States CalculateStates() override;
+    bool                  InsertText(size_t startPosition, std::string text) override;
+    bool                  SetTextContents(std::string newContents) override;
+    bool                  DeleteText(size_t startPosition, size_t endPosition) override;
   };
 };