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=29352994348aea35cc591ffdaac2265f4f45e0e6;hb=0a602bfd2ebfc87655895aaaabecce8de5c12d33;hpb=40a47ee7e802afa836ba45f481b87d0bd28e34fa diff --git a/dali-toolkit/internal/text/text-controller.h b/dali-toolkit/internal/text/text-controller.h index 2935299..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,20 +223,102 @@ 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 ); + void SetTextColor( const Vector4& textColor ); /** - * @brief Called to enable text input. + * @brief Retrieve the text color * - * @note Only selectable or editable controls should calls this. - * @param[in] decorator Used to create cursor, selection handle decorations etc. + * @return The text color */ - void EnableTextInput( DecoratorPtr decorator ); + const Vector4& GetTextColor() const; + + /** + * @brief Set the text color + * + * @param textColor The text color + */ + void SetPlaceholderTextColor( const Vector4& textColor ); + + /** + * @brief Retrieve the text color + * + * @return The text color + */ + const Vector4& GetPlaceholderTextColor() const; + + /** + * @brief Set the shadow offset. + * + * @param[in] shadowOffset The shadow offset, 0,0 indicates no shadow. + */ + void SetShadowOffset( const Vector2& shadowOffset ); + + /** + * @brief Retrieve the shadow offset. + * + * @return The shadow offset. + */ + const Vector2& GetShadowOffset() const; + + /** + * @brief Set the shadow color. + * + * @param[in] shadowColor The shadow color. + */ + void SetShadowColor( const Vector4& shadowColor ); + + /** + * @brief Retrieve the shadow color. + * + * @return The shadow color. + */ + const Vector4& GetShadowColor() const; + + /** + * @brief Set the underline color. + * + * @param[in] color color of underline. + */ + void SetUnderlineColor( const Vector4& color ); + + /** + * @brief Retrieve the underline color. + * + * @return The underline color. + */ + const Vector4& GetUnderlineColor() const; + + /** + * @brief Set the underline enabled flag. + * + * @param[in] enabled The underline enabled flag. + */ + void SetUnderlineEnabled( bool enabled ); + + /** + * @brief Returns whether the text is underlined or not. + * + * @return The underline state. + */ + bool IsUnderlineEnabled() const; + + /** + * @brief Set the override used for underline height, 0 indicates height will be supplied by font metrics + * + * @param[in] height The height in pixels of the underline + */ + void SetUnderlineHeight( float height ); + + /** + * @brief Retrieves the override height of an underline, 0 indicates height is supplied by font metrics + * + * @return The height of the underline, or 0 if height is not overrided. + */ + float GetUnderlineHeight() const; /** * @brief Called to enable/disable cursor blink. @@ -234,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. @@ -273,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. @@ -309,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. @@ -329,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. + */ + 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 GrabHandleEvent( GrabHandleState state, float x, float y ); + virtual void DecorationEvent( HandleType handle, HandleState state, float x, float y ); protected: @@ -343,9 +537,19 @@ protected: private: /** - * @brief Request a relayout using the ControlInterface. + * @brief Helper to clear font-specific data. */ - void RequestRelayout(); + 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. @@ -362,12 +566,6 @@ private: struct Impl; Impl* mImpl; - - // Avoid allocating this when the user does not specify a font - struct FontDefaults; - - // Avoid allocating this for non-editable controls - struct TextInput; }; } // namespace Text