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-impl.h;h=422bcdc3c75fdd469fa9afdfafcbc6db4f62f9d6;hp=78485416b2f00210dbd6525f2e17882c81b5e98c;hb=771ece63d9ad24a6835cbe46c8137db2ced47356;hpb=2d2ecb83398d1c811911b8a734fb844a16616636 diff --git a/dali-toolkit/internal/text/text-controller-impl.h b/dali-toolkit/internal/text/text-controller-impl.h index 7848541..422bcdc 100644 --- a/dali-toolkit/internal/text/text-controller-impl.h +++ b/dali-toolkit/internal/text/text-controller-impl.h @@ -19,8 +19,9 @@ */ // EXTERNAL INCLUDES -#include -#include +#include +#include +#include // INTERNAL INCLUDES #include @@ -42,8 +43,6 @@ struct Event // Used to queue input events until DoRelayout() enum Type { - KEYBOARD_FOCUS_GAIN_EVENT, - KEYBOARD_FOCUS_LOST_EVENT, CURSOR_KEY_EVENT, TAP_EVENT, PAN_EVENT, @@ -101,8 +100,11 @@ struct EventData { INACTIVE, SELECTING, + SELECTION_CHANGED, EDITING, - EDITING_WITH_POPUP + EDITING_WITH_POPUP, + GRAB_HANDLE_PANNING, + SELECTION_HANDLE_PANNING }; EventData( DecoratorPtr decorator ); @@ -135,19 +137,20 @@ struct EventData CharacterIndex mPreEditStartPosition; ///< Used to remove the pre-edit text if necessary. Length mPreEditLength; ///< Used to remove the pre-edit text if necessary. - bool mIsShowingPlaceholderText : 1; ///< True if the place-holder text is being displayed. - bool mPreEditFlag : 1; ///< True if the model contains text in pre-edit state. - bool mDecoratorUpdated : 1; ///< True if the decorator was updated during event processing. - bool mCursorBlinkEnabled : 1; ///< True if cursor should blink when active. - bool mGrabHandleEnabled : 1; ///< True if grab handle is enabled. - bool mGrabHandlePopupEnabled : 1; ///< True if the grab handle popu-up should be shown. - bool mSelectionEnabled : 1; ///< True if selection handles, highlight etc. are enabled. - bool mHorizontalScrollingEnabled : 1; ///< True if horizontal scrolling is enabled. - bool mVerticalScrollingEnabled : 1; ///< True if vertical scrolling is enabled. - bool mUpdateCursorPosition : 1; ///< True if the visual position of the cursor must be recalculated. - bool mUpdateLeftSelectionPosition : 1; ///< True if the visual position of the left selection handle must be recalculated. - bool mUpdateRightSelectionPosition : 1; ///< True if the visual position of the right selection handle must be recalculated. - bool mScrollAfterUpdateCursorPosition : 1; ///< Whether to scroll after the cursor position is updated. + bool mIsShowingPlaceholderText : 1; ///< True if the place-holder text is being displayed. + bool mPreEditFlag : 1; ///< True if the model contains text in pre-edit state. + bool mDecoratorUpdated : 1; ///< True if the decorator was updated during event processing. + bool mCursorBlinkEnabled : 1; ///< True if cursor should blink when active. + bool mGrabHandleEnabled : 1; ///< True if grab handle is enabled. + bool mGrabHandlePopupEnabled : 1; ///< True if the grab handle popu-up should be shown. + bool mSelectionEnabled : 1; ///< True if selection handles, highlight etc. are enabled. + bool mHorizontalScrollingEnabled : 1; ///< True if horizontal scrolling is enabled. + bool mVerticalScrollingEnabled : 1; ///< True if vertical scrolling is enabled. + bool mUpdateCursorPosition : 1; ///< True if the visual position of the cursor must be recalculated. + bool mUpdateLeftSelectionPosition : 1; ///< True if the visual position of the left selection handle must be recalculated. + bool mUpdateRightSelectionPosition : 1; ///< True if the visual position of the right selection handle must be recalculated. + bool mScrollAfterUpdatePosition : 1; ///< Whether to scroll after the cursor position is updated. + bool mScrollAfterDelete : 1; ///< Whether to scroll after delete characters. }; struct ModifyEvent @@ -196,6 +199,7 @@ struct Controller::Impl mFontDefaults( NULL ), mEventData( NULL ), mFontClient(), + mClipboard(), mView(), mLayoutEngine(), mModifyEvents(), @@ -210,6 +214,7 @@ struct Controller::Impl mVisualModel = VisualModel::New(); mFontClient = TextAbstraction::FontClient::Get(); + mClipboard = Clipboard::Get(); mView.SetVisualModel( mVisualModel ); @@ -233,6 +238,12 @@ struct Controller::Impl */ void QueueModifyEvent( ModifyEvent::Type type ) { + if( ModifyEvent::TEXT_REPLACED == type) + { + // Cancel previously queued inserts etc. + mModifyEvents.clear(); + } + ModifyEvent event; event.type = type; mModifyEvents.push_back( event ); @@ -276,7 +287,17 @@ struct Controller::Impl } } - void PreEditReset() + void ClearPreEditFlag() + { + if( mEventData ) + { + mEventData->mPreEditFlag = false; + mEventData->mPreEditStartPosition = 0; + mEventData->mPreEditLength = 0; + } + } + + void ResetImfManager() { // Reset incase we are in a pre-edit state. ImfManager imfManager = ImfManager::Get(); @@ -284,6 +305,14 @@ struct Controller::Impl { imfManager.Reset(); // Will trigger a commit message } + + ClearPreEditFlag(); + } + + bool IsClipboardEmpty() + { + bool result( mClipboard && mClipboard.NumberOfItems() ); + return !result; // // If NumberOfItems greater than 0, return false } void UpdateModel( OperationsMask operationsRequired ); @@ -296,8 +325,6 @@ struct Controller::Impl */ void GetDefaultFonts( Dali::Vector& fonts, Length numberOfCharacters ); - void OnKeyboardFocus( bool hasFocus ); - void OnCursorKeyEvent( const Event& event ); void OnTapEvent( const Event& event ); @@ -306,12 +333,15 @@ struct Controller::Impl void OnHandleEvent( const Event& event ); + void RepositionSelectionHandles( CharacterIndex selectionStart, CharacterIndex selectionEnd ); void RepositionSelectionHandles( float visualX, float visualY ); void ChangeState( EventData::State newState ); LineIndex GetClosestLine( float y ) const; + void FindSelectionIndices( float visualX, float visualY, CharacterIndex& startIndex, CharacterIndex& endIndex ); + /** * @brief Retrieves the cursor's logical position for a given touch point x,y * @@ -378,11 +408,23 @@ struct Controller::Impl void ClampVerticalScroll( const Vector2& actualSize ); /** + * @brief Scrolls the text to make a position visible. + * + * @pre mEventData must not be NULL. (there is a text-input or selection capabilities). + * + * @param[in] position A position in decorator coords. + * + * This method is called after inserting text, moving the cursor with the grab handle or the keypad, + * or moving the selection handles. + */ + void ScrollToMakePositionVisible( const Vector2& position ); + + /** * @brief Scrolls the text to make the cursor visible. * - * This method is called after inserting, deleting or moving the cursor with the keypad. + * This method is called after deleting text. */ - void ScrollToMakeCursorVisible(); + void ScrollTextToMatchCursor(); ControlInterface& mControlInterface; ///< Reference to the text controller. LogicalModelPtr mLogicalModel; ///< Pointer to the logical model. @@ -390,6 +432,7 @@ struct Controller::Impl FontDefaults* mFontDefaults; ///< Avoid allocating this when the user does not specify a font. EventData* mEventData; ///< Avoid allocating everything for text input until EnableTextInput(). TextAbstraction::FontClient mFontClient; ///< Handle to the font client. + Clipboard mClipboard; ///< Handle to the system clipboard View mView; ///< The view interface to the rendering back-end. LayoutEngine mLayoutEngine; ///< The layout engine. std::vector mModifyEvents; ///< Temporary stores the text set until the next relayout.