X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller.h;h=6c12dd3b25dc5f02b95fc3755d8d038dc3d07b71;hp=d37efabc7b862663cfbf79a5d7094dcc5926ddaf;hb=0a602bfd2ebfc87655895aaaabecce8de5c12d33;hpb=98d4ab61c23c9c7494f5936f7807b9c17075315f diff --git a/dali-toolkit/internal/text/text-controller.h b/dali-toolkit/internal/text/text-controller.h index d37efab..6c12dd3 100644 --- a/dali-toolkit/internal/text/text-controller.h +++ b/dali-toolkit/internal/text/text-controller.h @@ -20,6 +20,7 @@ // EXTERNAL INCLUDES #include +#include #include #include #include @@ -31,6 +32,7 @@ // INTERNAL INCLUDES #include #include +#include #include #include @@ -50,17 +52,26 @@ typedef IntrusivePtr ControllerPtr; typedef Dali::Toolkit::Text::ControlInterface ControlInterface; /** + * @brief Different placeholder-text can be shown when the control is active/inactive. + */ +enum PlaceholderType +{ + PLACEHOLDER_TYPE_ACTIVE, + PLACEHOLDER_TYPE_INACTIVE, +}; + +/** * @brief A Text Controller is used by UI Controls which display text. * * It manipulates the Logical & Visual text models on behalf of the UI Controls. * It provides a view of the text that can be used by rendering back-ends. * * For selectable/editable UI controls, the controller handles input events from the UI control - * and decorations (grab handles etc) via an observer interface. + * and decorations (grab handles etc) via an interface. */ -class Controller : public RefObject, public Decorator::Observer +class Controller : public RefObject, public Decorator::ControllerInterface { -private: +public: /** * @brief Text related operations to be done in the relayout process. @@ -83,7 +94,14 @@ private: ALL_OPERATIONS = 0xFFFF }; -public: + /** + * @brief Used to distinguish between regular key events and IMF events + */ + enum InsertType + { + COMMIT, + PRE_EDIT + }; /** * @brief Create a new instance of a Controller. @@ -94,6 +112,14 @@ public: static ControllerPtr New( ControlInterface& controlInterface ); /** + * @brief Called to enable text input. + * + * @note Selectable or editable controls should call this once after Controller::New(). + * @param[in] decorator Used to create cursor, selection handle decorations etc. + */ + void EnableTextInput( DecoratorPtr decorator ); + + /** * @brief Replaces any text previously set. * * @note This will be converted into UTF-32 when stored in the text model. @@ -111,16 +137,48 @@ public: /** * @brief Replaces any placeholder text previously set. * + * @param[in] cursorOffset Start position from the current cursor position to start deleting characters. + * @param[in] numberOfChars The number of characters to delete from the cursorOffset. + * @return True if the remove was successful. + */ + bool RemoveText( int cursorOffset, int numberOfChars ); + + /** + * @brief Retrieve the current cursor position. + * + * @return The cursor position. + */ + unsigned int GetLogicalCursorPosition() const; + + /** + * @brief Replaces any placeholder text previously set. + * + * @param[in] type Different placeholder-text can be shown when the control is active/inactive. * @param[in] text A string of UTF-8 characters. */ - void SetPlaceholderText( const std::string& text ); + void SetPlaceholderText( PlaceholderType type, const std::string& text ); /** * @brief Retrieve any placeholder text previously set. * - * @return A string of UTF-8 characters. + * @param[in] type Different placeholder-text can be shown when the control is active/inactive. + * @param[out] A string of UTF-8 characters. + */ + void GetPlaceholderText( PlaceholderType type, std::string& text ) const; + + /** + * @brief Sets the maximum number of characters that can be inserted into the TextModel + * + * @param[in] maxCharacters maximum number of characters to be accepted + */ + void SetMaximumNumberOfCharacters( int maxCharacters ); + + /** + * @brief Sets the maximum number of characters that can be inserted into the TextModel + * + * @param[in] maxCharacters maximum number of characters to be accepted */ - void GetPlaceholderText( std::string& text ) const; + int GetMaximumNumberOfCharacters(); /** * @brief Set the default font family. @@ -165,26 +223,32 @@ public: float GetDefaultPointSize() const; /** - * @brief Retrieve the default fonts. + * @brief Set the text color * - * @param[out] fonts The default font family, style and point sizes. - * @param[in] numberOfCharacters The number of characters in the logical model. + * @param textColor The text color */ - void GetDefaultFonts( Dali::Vector& fonts, Length numberOfCharacters ) const; + void SetTextColor( const Vector4& textColor ); + + /** + * @brief Retrieve the text color + * + * @return The text color + */ + const Vector4& GetTextColor() const; /** * @brief Set the text color * * @param textColor The text color */ - void SetTextColor( const Vector4& textColor ); + void SetPlaceholderTextColor( const Vector4& textColor ); /** * @brief Retrieve the text color * * @return The text color */ - const Vector4& GetTextColor() const; + const Vector4& GetPlaceholderTextColor() const; /** * @brief Set the shadow offset. @@ -257,14 +321,6 @@ public: float GetUnderlineHeight() const; /** - * @brief Called to enable text input. - * - * @note Only selectable or editable controls should calls this. - * @param[in] decorator Used to create cursor, selection handle decorations etc. - */ - void EnableTextInput( DecoratorPtr decorator ); - - /** * @brief Called to enable/disable cursor blink. * * @note Only editable controls should calls this. @@ -318,30 +374,24 @@ public: void ProcessModifyEvents(); /** - * @brief Used to process an event queued from SetText() - * - * @param[in] newText The new text to store in the logical model. + * @brief Used to remove placeholder text. */ - void ReplaceTextEvent( const std::string& newText ); + void ResetText(); /** - * @brief Used to process an event queued from key events etc. - * - * @param[in] text The text to insert into the logical model. + * @brief Used to process an event queued from SetText() */ - void InsertTextEvent( const std::string& text ); + void TextReplacedEvent(); /** - * @brief Used to process an event queued from backspace key etc. + * @brief Used to process an event queued from key events etc. */ - void DeleteTextEvent(); + void TextInsertedEvent(); /** - * @brief Update the model following text replace/insert etc. - * - * @param[in] operationsRequired The layout operations which need to be done. + * @brief Used to process an event queued from backspace key etc. */ - void UpdateModel( OperationsMask operationsRequired ); + void TextDeletedEvent(); /** * @brief Lays-out the text. @@ -357,6 +407,38 @@ public: Size& layoutSize ); /** + * @brief Whether to enable the multi-line layout. + * + * @param[in] enable \e true enables the multi-line (by default) + */ + void SetMultiLineEnabled( bool enable ); + + /** + * @return Whether the multi-line layout is enabled. + */ + bool IsMultiLineEnabled() const; + + /** + * @copydoc Dali::Toolkit::Text::LayoutEngine::SetHorizontalAlignment() + */ + void SetHorizontalAlignment( LayoutEngine::HorizontalAlignment alignment ); + + /** + * @copydoc Dali::Toolkit::Text::LayoutEngine::GetHorizontalAlignment() + */ + LayoutEngine::HorizontalAlignment GetHorizontalAlignment() const; + + /** + * @copydoc Dali::Toolkit::Text::LayoutEngine::SetVerticalAlignment() + */ + void SetVerticalAlignment( LayoutEngine::VerticalAlignment alignment ); + + /** + * @copydoc Dali::Toolkit::Text::LayoutEngine::GetVerticalAlignment() + */ + LayoutEngine::VerticalAlignment GetVerticalAlignment() const; + + /** * @brief Calulates the alignment of the whole text inside the bounding box. * * @param[in] size The size of the bounding box. @@ -393,10 +475,19 @@ public: * @brief Caller by editable UI controls when key events are received. * * @param[in] event The key event. + * @param[in] type Used to distinguish between regular key events and IMF events. */ bool KeyEvent( const Dali::KeyEvent& event ); /** + * @brief Caller by editable UI controls when key events are received. + * + * @param[in] text The text to insert. + * @param[in] type Used to distinguish between regular key events and IMF events. + */ + void InsertText( const std::string& text, InsertType type ); + + /** * @brief Caller by editable UI controls when a tap gesture occurs. * @param[in] tapCount The number of taps. * @param[in] x The x position relative to the top-left of the parent control. @@ -413,9 +504,28 @@ public: void PanEvent( Gesture::State state, const Vector2& displacement ); /** - * @copydoc Dali::Toolkit::Text::Decorator::Observer::GrabHandleEvent() + * @brief Event received from IMF manager + * + * @param[in] imfManager The IMF manager. + * @param[in] imfEvent The event received. + * @return A data struture indicating if update is needed, cursor position and current text. */ - virtual void GrabHandleEvent( GrabHandleState state, float x, float y ); + ImfManager::ImfCallbackData OnImfEvent( ImfManager& imfManager, const ImfManager::ImfEventData& imfEvent ); + + /** + * @copydoc Dali::Toolkit::Text::Decorator::ControllerInterface::GetTargetSize() + */ + virtual void GetTargetSize( Vector2& targetSize ); + + /** + * @copydoc Dali::Toolkit::Text::Decorator::ControllerInterface::AddDecoration() + */ + virtual void AddDecoration( Actor& actor ); + + /** + * @copydoc Dali::Toolkit::Text::Decorator::ControllerInterface::DecorationEvent() + */ + virtual void DecorationEvent( HandleType handle, HandleState state, float x, float y ); protected: @@ -427,6 +537,21 @@ protected: private: /** + * @brief Helper to clear font-specific data. + */ + void ShowPlaceholderText(); + + /** + * @brief Helper to clear all the model data except for LogicalModel::mText. + */ + void ClearModelData(); + + /** + * @brief Helper to clear font-specific data (only). + */ + void ClearFontData(); + + /** * @brief Private constructor. */ Controller( ControlInterface& controlInterface );