[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 f3d97a9fa6e7c3d8be1704382c97226442e8aac8..dabd012d9c9a76fdb1bfa182378dbe47defb0ea7 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 48e01188be540434ae51113beea3189d726d7320..be18ec523b2e27740ef5c1f6e3170ab0d74b5cf8 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 d0609b60d1161e9359915d2a678a81993e69e74c..eb3bae4901d2085c0b8f7a33bf29187124113fdd 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 c0d790394f63be1c776ec3a1d0713c67f60c83eb..4e5cd9cb9a3ad2790f0a22d92dae4c5ad2322271 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 670b81c9db67de5ea325803d81c8ef4cb4f8bb3b..c76f05ad9f8b7984174994d14dc6756d9ebfd4b3 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;
   };
 };