Further refactoring of text-controller-impl
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / text-controller-impl.h
index 981e498..db02721 100755 (executable)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_TEXT_CONTROLLER_IMPL_H
 
 /*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -43,10 +43,15 @@ namespace Text
 const float DEFAULT_TEXTFIT_MIN = 10.f;
 const float DEFAULT_TEXTFIT_MAX = 100.f;
 const float DEFAULT_TEXTFIT_STEP = 1.f;
+const float DEFAULT_FONT_SIZE_SCALE = 1.f;
 
 //Forward declarations
 struct CursorInfo;
 struct FontDefaults;
+struct ControllerImplEventHandler;
+struct SelectionHandleController;
+
+class SelectableControlInterface;
 
 struct Event
 {
@@ -105,7 +110,7 @@ struct EventData
 
   EventData( DecoratorPtr decorator, InputMethodContext& inputMethodContext );
 
-  ~EventData();
+  ~EventData() = default;
 
   static bool IsEditingState( State stateToCheck )
   {
@@ -170,6 +175,7 @@ struct EventData
   bool mPlaceholderEllipsisFlag         : 1;   ///< True if the text controller sets the placeholder ellipsis.
   bool mShiftSelectionFlag              : 1;   ///< True if the text selection using Shift key is enabled.
   bool mUpdateAlignment                 : 1;   ///< True if the whole text needs to be full aligned..
+  bool mEditingEnabled                  : 1;   ///< True if the editing is enabled, false otherwise.
 };
 
 struct ModifyEvent
@@ -202,11 +208,11 @@ struct FontDefaults
     fontClient.GetDefaultPlatformFontDescription( mFontDescription );
   }
 
-  FontId GetFontId( TextAbstraction::FontClient& fontClient )
+  FontId GetFontId( TextAbstraction::FontClient& fontClient, float fontPointSize )
   {
     if( !mFontId )
     {
-      const PointSize26Dot6 pointSize = static_cast<PointSize26Dot6>( mDefaultPointSize * 64.f );
+      const PointSize26Dot6 pointSize = static_cast<PointSize26Dot6>( fontPointSize * 64.f );
       mFontId = fontClient.GetFontId( mFontDescription, pointSize );
     }
 
@@ -308,9 +314,11 @@ struct OutlineDefaults
 struct Controller::Impl
 {
   Impl( ControlInterface* controlInterface,
-        EditableControlInterface* editableControlInterface )
+        EditableControlInterface* editableControlInterface,
+        SelectableControlInterface* selectableControlInterface )
   : mControlInterface( controlInterface ),
     mEditableControlInterface( editableControlInterface ),
+    mSelectableControlInterface( selectableControlInterface ),
     mModel(),
     mFontDefaults( NULL ),
     mUnderlineDefaults( NULL ),
@@ -343,7 +351,8 @@ struct Controller::Impl
     mTextFitMinSize( DEFAULT_TEXTFIT_MIN ),
     mTextFitMaxSize( DEFAULT_TEXTFIT_MAX ),
     mTextFitStepSize( DEFAULT_TEXTFIT_STEP ),
-    mTextFitEnabled( false )
+    mTextFitEnabled( false ),
+    mFontSizeScale( DEFAULT_FONT_SIZE_SCALE )
   {
     mModel = Model::New();
 
@@ -606,21 +615,35 @@ struct Controller::Impl
    */
   float GetDefaultFontLineHeight();
 
-  void OnCursorKeyEvent( const Event& event );
-
-  void OnTapEvent( const Event& event );
-
-  void OnPanEvent( const Event& event );
+  /**
+   * @copydoc Text::Controller::GetPrimaryCursorPosition()
+   */
+  CharacterIndex GetPrimaryCursorPosition() const;
 
-  void OnLongPressEvent( const Event& event );
+  /**
+   * @copydoc Text::Controller::SetPrimaryCursorPosition()
+   */
+  bool SetPrimaryCursorPosition( CharacterIndex index );
 
-  void OnHandleEvent( const Event& event );
+  /**
+   * @copydoc Text::SelectableControlInterface::SetTextSelectionRange()
+   */
+  void SetTextSelectionRange(const uint32_t *pStart, const uint32_t *pEndf);
 
-  void OnSelectEvent( const Event& event );
+  /**
+   * @copydoc Text::SelectableControlInterface::GetTextSelectionRange()
+   */
+  Uint32Pair GetTextSelectionRange() const;
 
-  void OnSelectAllEvent();
+  /**
+   * @copydoc Text::EditableControlInterface::IsEditable()
+   */
+  bool IsEditable() const;
 
-  void OnSelectNoneEvent();
+  /**
+   * @copydoc Text::EditableControlInterface::SetEditable()
+   */
+  void SetEditable( bool editable );
 
   /**
    * @brief Retrieves the selected text. It removes the text if the @p deleteAfterRetrieval parameter is @e true.
@@ -630,13 +653,17 @@ struct Controller::Impl
    */
   void RetrieveSelection( std::string& selectedText, bool deleteAfterRetrieval );
 
+  void SetSelection( int start, int end );
+
+  std::pair< int, int > GetSelectionIndexes() const;
+
   void ShowClipboard();
 
   void HideClipboard();
 
   void SetClipboardHideEnable(bool enable);
 
-  bool CopyStringToClipboard( std::string& source );
+  bool CopyStringToClipboard( const std::string& source );
 
   void SendSelectionToClipboard( bool deleteAfterSending );
 
@@ -729,6 +756,11 @@ struct Controller::Impl
   void ScrollTextToMatchCursor( const CursorInfo& cursorInfo );
 
   /**
+   * @brief Scrolls the text to make primary cursor visible.
+   */
+  void ScrollTextToMatchCursor( );
+
+  /**
    * @brief Create an actor that renders the text background color
    *
    * @return the created actor or an empty handle if no background color needs to be rendered.
@@ -757,6 +789,7 @@ public:
 
   ControlInterface* mControlInterface;     ///< Reference to the text controller.
   EditableControlInterface* mEditableControlInterface; ///< Reference to the editable text controller.
+  SelectableControlInterface* mSelectableControlInterface; ///< Reference to the selectable text controller.
   ModelPtr mModel;                         ///< Pointer to the text's model.
   FontDefaults* mFontDefaults;             ///< Avoid allocating this when the user does not specify a font.
   UnderlineDefaults* mUnderlineDefaults;   ///< Avoid allocating this when the user does not specify underline parameters.
@@ -797,6 +830,11 @@ public:
   float mTextFitMaxSize;                   ///< Maximum Font Size for text fit. Default 100
   float mTextFitStepSize;                  ///< Step Size for font intervalse. Default 1
   bool  mTextFitEnabled : 1;               ///< Whether the text's fit is enabled.
+  float mFontSizeScale;                    ///< Scale value for Font Size. Default 1.0
+
+private:
+  friend ControllerImplEventHandler;
+  friend SelectionHandleController;
 };
 
 } // namespace Text