Merge "[AT-SPI] Add SetTextContents, InsertText and DeleteText" into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / text-controls / text-editor-impl.h
index ed8d039..9a06ea5 100644 (file)
 #include <dali/public-api/animation/animation.h>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/controls/scroll-bar/scroll-bar.h>
 #include <dali-toolkit/devel-api/controls/text-controls/text-editor-devel.h>
 #include <dali-toolkit/internal/controls/control/control-data-impl.h>
 #include <dali-toolkit/internal/text/decorator/text-decorator.h>
 #include <dali-toolkit/internal/text/rendering/text-renderer.h>
+#include <dali-toolkit/internal/text/text-anchor-control-interface.h>
 #include <dali-toolkit/internal/text/text-control-interface.h>
 #include <dali-toolkit/internal/text/text-controller.h>
 #include <dali-toolkit/internal/text/text-editable-control-interface.h>
@@ -47,7 +49,7 @@ namespace Internal
 /**
  * @brief A control which renders a long text string with styles.
  */
-class TextEditor : public Control, public Text::ControlInterface, public Text::EditableControlInterface, public Text::SelectableControlInterface
+class TextEditor : public Control, public Text::ControlInterface, public Text::EditableControlInterface, public Text::SelectableControlInterface, public Text::AnchorControlInterface
 {
 public:
   /**
@@ -86,6 +88,11 @@ public:
   DevelTextEditor::MaxLengthReachedSignalType& MaxLengthReachedSignal();
 
   /**
+   * @copydoc Dali::Toollkit::TextEditor::AnchorClickedSignal()
+   */
+  DevelTextEditor::AnchorClickedSignalType& AnchorClickedSignal();
+
+  /**
    * Connects a callback function with the object's signals.
    * @param[in] object The object providing the signal.
    * @param[in] tracker Used to disconnect the signal.
@@ -204,7 +211,7 @@ private: // From Control
   /**
    * @copydoc Text::EditableControlInterface::TextChanged()
    */
-  void TextChanged() override;
+  void TextChanged(bool immediate) override;
 
   /**
    * @copydoc Text::EditableControlInterface::MaxLengthReached()
@@ -275,7 +282,15 @@ public:
   /**
    * @copydoc Text::EditableControlInterface::SetEditable()
    */
-  void                SetEditable(bool editable) override;
+  void SetEditable(bool editable) override;
+
+  // From AnchorControlInterface
+
+  /**
+   * @copydoc Text::AnchorControlInterface::AnchorClicked()
+   */
+  void AnchorClicked(const std::string& href) override;
+
   Text::ControllerPtr getController();
 
 private: // Implementation
@@ -328,6 +343,11 @@ private: // Implementation
   void OnIdleSignal();
 
   /**
+   * @brief Emits TextChanged signal.
+   */
+  void EmitTextChangedSignal();
+
+  /**
    * @brief set RenderActor's position with new scrollPosition
    *
    * Apply updated scroll position or start scroll animation if VerticalScrollAnimation is enabled
@@ -361,7 +381,7 @@ private: // Implementation
    * @param[in] actor The actor to be resized.
    * @param[in] size Size to change.
    */
-  void ResizeActor( Actor& actor, const Vector2& size );
+  void ResizeActor(Actor& actor, const Vector2& size);
 
   /**
    * @brief Render view, create and attach actor(s) to this text editor.
@@ -377,6 +397,7 @@ private: // Data
   Toolkit::TextEditor::InputStyleChangedSignalType     mInputStyleChangedSignal;
   Toolkit::TextEditor::ScrollStateChangedSignalType    mScrollStateChangedSignal;
   Toolkit::DevelTextEditor::MaxLengthReachedSignalType mMaxLengthReachedSignal;
+  Toolkit::DevelTextEditor::AnchorClickedSignalType    mAnchorClickedSignal;
 
   InputMethodContext            mInputMethodContext;
   Text::ControllerPtr           mController;
@@ -388,6 +409,7 @@ private: // Data
   Dali::Animation               mAnimation; ///< Scroll indicator Show/Hide Animation.
   Dali::TimePeriod              mAnimationPeriod;
   std::vector<Actor>            mClippingDecorationActors; ///< Decoration actors which need clipping.
+  Dali::InputMethodOptions      mInputMethodOptions;
 
   Actor         mRenderableActor;
   Actor         mActiveLayer;
@@ -401,12 +423,13 @@ private: // Data
   bool  mScrollAnimationEnabled : 1;
   bool  mScrollBarEnabled : 1;
   bool  mScrollStarted : 1;
+  bool  mTextChanged : 1; ///< If true, emits TextChangedSignal in next OnRelayout().
 
-  struct AccessibleImpl : public Control::Impl::AccessibleImpl,
+  struct AccessibleImpl : public DevelControl::AccessibleImpl,
                           public virtual Dali::Accessibility::Text,
                           public virtual Dali::Accessibility::EditableText
   {
-    using Control::Impl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::AccessibleImpl::AccessibleImpl;
 
     std::string           GetName() override;
     std::string           GetText(size_t startOffset, size_t endOffset) override;
@@ -420,6 +443,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;
   };
 };