X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fpopup%2Fpopup-impl.h;h=91d68b787d392e93bc96c16394e93cb732e5622a;hp=efdac513d18d86fbe066bb15a803ea84f1ccbdea;hb=e9d852fcdacc5788785bfe0b617bd757794e8208;hpb=7aa9e3d716396348b89c913b306bbc1ce201db69 diff --git a/dali-toolkit/internal/controls/popup/popup-impl.h b/dali-toolkit/internal/controls/popup/popup-impl.h index efdac51..91d68b7 100755 --- a/dali-toolkit/internal/controls/popup/popup-impl.h +++ b/dali-toolkit/internal/controls/popup/popup-impl.h @@ -2,7 +2,7 @@ #define __DALI_TOOLKIT_INTERNAL_POPUP_H__ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2015 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. @@ -19,16 +19,15 @@ */ // EXTERNAL INCLUDES -#include #include +#include #include +#include // INTERNAL INCLUDES #include -#include -#include #include -#include +#include namespace Dali { @@ -36,16 +35,12 @@ namespace Dali namespace Toolkit { -class Button; - namespace Internal { class Popup; -class PopupStyle; -typedef IntrusivePtr PopupPtr; -typedef IntrusivePtr PopupStylePtr; +typedef IntrusivePtr< Popup > PopupPtr; /** * @copydoc Toolkit::Popup @@ -63,86 +58,197 @@ public: public: /** - * Returns number of buttons added to Popup - * - * @return Number of buttons + * @copydoc Toolkit::Popup::SetPopupBackgroundImage */ - size_t GetButtonCount() const; + void SetPopupBackgroundImage( Actor image ); /** - * @copydoc Toolkit::Popup::SetBackgroundImage + * @copydoc Toolkit::Popup::GetPopupBackgroundImage */ - void SetBackgroundImage( Actor image ); + Actor GetPopupBackgroundImage() const; /** - * @copydoc Toolkit::Popup::SetButtonAreaImage + * @copydoc Toolkit::Popup::SetTitle( Actor titleActor ) */ - void SetButtonAreaImage( Actor image ); + void SetTitle( Actor titleActor ); /** - * @copydoc Toolkit::Popup::SetTitle( const std::string& text ); + * @copydoc Toolkit::Popup::GetTitle */ - void SetTitle( const std::string& text ); + Actor GetTitle() const; /** - * @copydoc Toolkit::Popup::GetTitle + * @copydoc Toolkit::Popup::SetContent + */ + void SetContent( Actor content ); + + /** + * @copydoc Toolkit::Popup::GetContent + */ + Actor GetContent() const; + + /** + * @copydoc Toolkit::Popup::SetFooter + */ + void SetFooter( Actor control ); + + /** + * @copydoc Toolkit::Popup::GetFooter + */ + Actor GetFooter() const; + + /** + * @copydoc Toolkit::Popup::SetDisplayState + */ + void SetDisplayState( Toolkit::Popup::DisplayState displayState ); + + /** + * @copydoc Toolkit::Popup::GetDisplayState + */ + Toolkit::Popup::DisplayState GetDisplayState() const; + + /** + * @copydoc Toolkit::Popup::SetTailVisibility + */ + void SetTailVisibility( bool visible ); + + /** + * @copydoc Toolkit::Popup::IsTailVisible + */ + const bool IsTailVisible() const; + + /** + * @copydoc Toolkit::Popup::SetTailPosition + */ + void SetTailPosition( Vector3 position ); + + /** + * @copydoc Toolkit::Popup::GetTailPosition + */ + const Vector3& GetTailPosition() const; + + /** + * @copydoc Toolkit::Popup::SetContextualMode + */ + void SetContextualMode( Toolkit::Popup::ContextualMode mode ); + + /** + * @copydoc Toolkit::Popup::GetContextualMode + */ + Toolkit::Popup::ContextualMode GetContextualMode() const; + + /** + * @copydoc Toolkit::Popup::SetAnimationDuration + */ + void SetAnimationDuration( float duration ); + + /** + * @copydoc Toolkit::Popup::GetAnimationDuration + */ + float GetAnimationDuration() const; + + /** + * @copydoc Toolkit::Popup::SetAnimationMode + */ + void SetAnimationMode( Toolkit::Popup::AnimationMode animationMode ); + + /** + * @copydoc Toolkit::Popup::GetAnimationMode + */ + Toolkit::Popup::AnimationMode GetAnimationMode() const; + + /** + * @copydoc Toolkit::Popup::SetAutoHideDelay + */ + void SetAutoHideDelay( int delay ); + + /** + * @copydoc Toolkit::Popup::GetAutoHideDelay + */ + int GetAutoHideDelay() const; + + /** + * @copydoc Toolkit::Popup::SetBackingEnabled + */ + void SetBackingEnabled( bool enabled ); + + /** + * @copydoc Toolkit::Popup::IsBackingEnabled + */ + const bool IsBackingEnabled() const; + + /** + * @copydoc Toolkit::Popup::SetBackingColor + */ + void SetBackingColor( Vector4 color ); + + /** + * @copydoc Toolkit::Popup::GetBackingColor + */ + const Vector4& GetBackingColor() const; + + /** + * @copydoc Toolkit::Popup::SetTailUpImage */ - std::string GetTitle() const; + void SetTailUpImage( std::string image ); /** - * @copydoc Toolkit::Popup::AddButton + * @copydoc Toolkit::Popup::GetTailUpImage */ - void AddButton( Toolkit::Button button ); + const std::string& GetTailUpImage() const; /** - * @copydoc Toolkit::Popup::SetState( PopupState state ) + * @copydoc Toolkit::Popup::SetTailDownImage */ - void SetState( Toolkit::Popup::PopupState state ); + void SetTailDownImage( std::string image ); /** - * @copydoc Toolkit::Popup::SetState( PopupState state, float duration ) + * @copydoc Toolkit::Popup::GetTailDownImage */ - void SetState( Toolkit::Popup::PopupState state, float duration ); + const std::string& GetTailDownImage() const; /** - * @copydoc Toolkit::Popup::GetState( ) + * @copydoc Toolkit::Popup::SetTailLeftImage */ - Toolkit::Popup::PopupState GetState() const; + void SetTailLeftImage( std::string image ); /** - * @copydoc Toolkit::Popup::ShowTail + * @copydoc Toolkit::Popup::GetTailLeftImage */ - void ShowTail(const Vector3& position); + const std::string& GetTailLeftImage() const; /** - * @copydoc Toolkit::Popup::HideTail + * @copydoc Toolkit::Popup::SetTailRightImage */ - void HideTail(); + void SetTailRightImage( std::string image ); /** - * Sets the style of the popup - * @param[in] style The style of the popup + * @copydoc Toolkit::Popup::GetTailRightImage */ - void SetStyle(PopupStyle& style); + const std::string& GetTailRightImage() const; /** - * Gets the style of the popup - * @return style of the popup + * Called when a property of an object of this type is set. + * @param[in] object The object whose property is set. + * @param[in] propertyIndex The property index. + * @param[in] value The new property value. */ - PopupStylePtr GetStyle() const; + static void SetProperty( BaseObject* object, Property::Index propertyIndex, const Property::Value& value ); /** - * @copydoc Toolkit::Popup::MarkDirtyForRelayout + * Called to retrieve a property of an object of this type. + * @param[in] object The object whose property is to be retrieved. + * @param[in] propertyIndex The property index. + * @return The current value of the property. */ - void MarkDirtyForRelayout(); + static Property::Value GetProperty( BaseObject* object, Property::Index propertyIndex ); protected: /** * Construct a new Popup. - * @param[in] style of the popup */ - Popup(PopupStyle& style); + Popup(); /** * A reference counted object may only be deleted by calling Unreference() @@ -152,33 +258,94 @@ protected: private: /** - * Creates and applies the default background image. + * @brief Creates the layout of the popup, to be done just before showing for the first time. + * Also calls OnLayoutSetup() to allow derived classes to perform layout at this stage. + */ + void LayoutPopup(); + + /** + * @brief Creates or destroys the popup tail based on the current TAIL_DISPLAYED property. + * Also uses the TAIL_POSITION property to position it. + */ + void LayoutTail(); + + /** + * @brief Performs any relative positioning required based on the current contextual mode, if set. + * If contextual mode is not enabled, this method has no effect. + * @param[in] size The Popups current size (can be accessed from within the OnRelayout() method). + */ + void LayoutContext( const Vector2& size ); + + /** + * @brief All transition-in animation setup and layout is done here. + * Different types of animation mode require different layouts to work, + * this function encapsulates anything animation-mode specific. + * This is called once for multiple displays/hides of the pops. + * It is only re-called when the layout becomes dirty. */ - void SetDefaultBackgroundImage(); + void LayoutAnimation(); /** - * Create Dim Backing - * (covers all content behind the dialog) + * @brief Initiates a transition-in or transition-out animation based + * on the current animation settings. + * @param[in] transitionIn True to perform a transition-in, false for transition out. + * @param[in] instantaneous Optional - If set to true will override the duration to provide an instant animation. */ - void CreateBacking(); + void StartTransitionAnimation( bool transitionIn, bool instantaneous = false ); /** - * Create Dialog - * (dialog content resides inside this - buttons, title etc.) + * @brief Invoked once a display state change has completed. */ - void CreateDialog(); + void DisplayStateChangeComplete(); /** - * Animate Popup by scaling uniformally from 0 to 100% and vice versa (default behaviour) - * @param[in] state The desired state to change into. - * @param[in] duration The time for this animation to take. + * @brief This is called when the auto-hide timer finishes. + * It performs a display-state change to HIDDEN. + * @return True as signal is consumed. */ - void HandleStateChange( Toolkit::Popup::PopupState state, float duration ); + bool OnAutoHideTimeReached(); /** - * Invoked once StateChange has completed. + * @brief Create Dimmed Backing (covers all content behind the dialog). + * + * @return The backing control. */ - void HandleStateChangeComplete(); + Toolkit::Control CreateBacking(); + + /** + * @brief Creates the lower area within the popup. + */ + void CreateFooter(); + + /** + * @brief Sets if the popup allows touch events to pass through or not. + * + * @param[in] enabled Set to true to make the popup touch-transparent. + */ + void SetTouchTransparent( bool enabled ); + + /** + * @brief Returns if the popup allows touch events to pass through or not. + * + * @return True if the popup is touch-transparent. + */ + const bool IsTouchTransparent() const; + + /** + * @brief Allows the popup entry animation to be setup from a Property::Map that could + * originate, for example, from a JSON file. + * + * @param[in] map A Property::Map containing a description of an animation + */ + void SetEntryAnimationData( const Property::Map& map ); + + /** + * @brief Allows the popup exit animation to be setup from a Property::Map that could + * originate, for example, from a JSON file. + * + * @param[in] map A Property::Map containing a description of an animation + */ + void SetExitAnimationData( const Property::Map& map ); public: // Signals @@ -188,9 +355,24 @@ public: // Signals Toolkit::Popup::TouchedOutsideSignalType& OutsideTouchedSignal(); /** + * @copydoc Dali::Toolkit::Popup::ShowingSignal() + */ + Toolkit::Popup::DisplayStateChangeSignalType& ShowingSignal(); + + /** + * @copydoc Dali::Toolkit::Popup::ShownSignal() + */ + Toolkit::Popup::DisplayStateChangeSignalType& ShownSignal(); + + /** + * @copydoc Dali::Toolkit::Popup::HidingSignal() + */ + Toolkit::Popup::DisplayStateChangeSignalType& HidingSignal(); + + /** * @copydoc Dali::Toolkit::Popup::HiddenSignal() */ - Toolkit::Popup::HiddenSignalType& HiddenSignal(); + Toolkit::Popup::DisplayStateChangeSignalType& HiddenSignal(); /** * Connects a callback function with the object's signals. @@ -206,10 +388,10 @@ public: // Signals private: /** - * Signal occurs when the State animation (transition from hide<->show) finishes + * Signal occurs when the State animation (transition from hide <-> show) finishes. * @param[in] source The animation that just finished. */ - void OnStateAnimationFinished( Animation& source ); + void OnDisplayChangeAnimationFinished( Animation& source ); /** * Signal occurs when the dimmed backing for the Popup is touched. @@ -220,12 +402,12 @@ private: bool OnBackingTouched(Actor actor, const TouchEvent& event); /** - * Signal occurs when the mouse wheel event is occured on dimmed backing for the Popup. - * @param[in] actor The Actor got mouse wheel - * @param[in] event The Mouse Wheel Event. + * Signal occurs when a mouse wheel event occurs on the dimmed backing. + * @param[in] actor The Actor that got the wheel event. + * @param[in] event The Wheel Event. * @return Whether to consume event or not. */ - bool OnBackingMouseWheelEvent(Actor actor, const MouseWheelEvent& event); + bool OnBackingWheelEvent(Actor actor, const WheelEvent& event); /** * Signal occurs when the dialog has been touched. @@ -241,15 +423,22 @@ private: virtual void OnInitialize(); /** - * @copydoc Dali::CustomActorImpl::OnPropertySet() + * Called whenever the popup layout is re-set up. + * Normally due to a change in contents. + * Note: This is only done when the popup is shown. */ - virtual void OnPropertySet( Property::Index index, Property::Value propertyValue ); + virtual void OnLayoutSetup() {} + + /** + * Called when the popup is directly or indirectly parented to the stage. + */ + virtual void OnStageConnection( int depth ); /** * From Control; called after a child has been added to the owning actor. * @param[in] child The child which has been added. */ - virtual void OnControlChildAdd( Actor& child ); + virtual void OnChildAdd( Actor& child ); /** * @copydoc Control::OnRelayOut() @@ -259,12 +448,7 @@ private: /** * @copydoc Control::OnSetResizePolicy() */ - virtual void OnSetResizePolicy( ResizePolicy policy, Dimension dimension ); - - /** - * @copydoc Control::OnKeyEvent() - */ - virtual bool OnKeyEvent(const KeyEvent& event); + virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension ); /** * @copydoc Control::GetNaturalSize() @@ -274,93 +458,118 @@ private: /** * @copydoc Control::GetHeightForWidth() */ - float GetHeightForWidth( float width ); + virtual float GetHeightForWidth( float width ); /** * @copydoc Control::GetWidthForHeight() */ - float GetWidthForHeight( float height ); + virtual float GetWidthForHeight( float height ); /** - * @copydoc Control::GetNextKeyboardFocusableActor() + * @copydoc Control::OnKeyEvent() */ - Actor GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocusNavigationDirection direction, bool loopEnabled); + virtual bool OnKeyEvent( const KeyEvent& event ); /** - * Create the root actor for the footer + * @copydoc Control::GetNextKeyboardFocusableActor() */ - void CreateFooter(); + Actor GetNextKeyboardFocusableActor( Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled ); private: - // Undefined - Popup(const Popup&); - - // Undefined - Popup& operator=(const Popup& rhs); - -private: + /** + * Recursively add any focusable actors or layout containers to the provided vector. + * Include the top level actor if it is a layout container. + * + * @param[in] parent The actor to start from + * @param[in/out] focusableActors The vector to add focusable actors to + */ + void AddFocusableChildren( Actor parent, std::vector< Actor >& focusableActors ); - struct LayoutInfo - { - Vector3 mTitleSize; - Vector3 mContentSize; - Vector3 mButtonBgSize; - std::vector mButtonSize; - }; + /** + * Recursively add any focusable actors or layout containers to the provided vector. + * + * @param[in] parent The actor to start from + * @param[in/out] focusableActors The vector to add focusable actors to + */ + void AddFocusableChildrenRecursive( Actor parent, std::vector< Actor >& focusableActors ); private: - bool mShowing; ///< Popup is showing or not - - Layer mLayer; ///< Popup Layer (i.e. Dim backing and PopupBg reside in this) - Toolkit::TableView mPopupLayout; ///< Popup layout (i.e. dialog reside in this) - ImageActor mBacking; ///< Backing actor (dim effect) - - Actor mPreviousFocusedActor; ///< Store the previous focused actor to restore the focus when popup hide - - Actor mBackgroundImage; ///< Stores the background image. - Actor mButtonAreaImage; ///< Stores the button background image. - Toolkit::TextLabel mTitle; ///< Stores the text title. - Actor mContent; ///< Stores popup's content. - Actor mBottomBg; ///< bottom button bar background. ImageActor is replaced with Actor due to hidden image. - Actor mTailImage; ///< Stores the tail image - - ActorContainer mButtons; ///< Keeps track of the buttons added to this popup. - Toolkit::Popup::PopupState mState; ///< Popup current state. - Animation mAnimation; ///< The animation instance managing state changing. - bool mAlterAddedChild; ///< Flag used to control whether children are reparented or not. - PopupStylePtr mPopupStyle; ///< The style to be used for this popup. + // Undefined. + Popup(const Popup&); - LayoutInfo mLayoutInfo; ///< Stores sizes of all popup components. + // Undefined. + Popup& operator=(const Popup& rhs); - Toolkit::Popup::TouchedOutsideSignalType mTouchedOutsideSignal; - Toolkit::Popup::HiddenSignalType mHiddenSignal; +private: - Property::Index mPropertyTitle; ///< Property index for Title. - Property::Index mPropertyState; ///< Property index for popup state. + Toolkit::Popup::TouchedOutsideSignalType mTouchedOutsideSignal; + Toolkit::Popup::DisplayStateChangeSignalType mShowingSignal; + Toolkit::Popup::DisplayStateChangeSignalType mShownSignal; + Toolkit::Popup::DisplayStateChangeSignalType mHidingSignal; + Toolkit::Popup::DisplayStateChangeSignalType mHiddenSignal; + + Layer mLayer; ///< Popup Layer (i.e. Dim backing and PopupBg reside in this). + Toolkit::TableView mPopupLayout; ///< Popup Background (i.e. dialog reside in this). + Toolkit::Control mBacking; ///< Backing actor (dim effect). + Actor mPreviousFocusedActor; ///< Store the previous focused actor to restore the focus when popup hide. + Actor mTailImage; ///< Stores the tail image. + Actor mPopupContainer; ///< This actor is used to house the background image and the main popup layout. + Animation mAnimation; ///< The current animation in use used to manage display state changing. + bool mAlterAddedChild; ///< Flag used to control whether children are reparented or not. + bool mLayoutDirty; ///< Set to true whenever any property that would require a layout update is modified. + Timer mAutoHideTimer; ///< Used to perform an auto-hide of the popup if desired. + bool mTouchTransparent; ///< Allows all events to pass through the popup. + + // Main Content related properties: + Actor mTitle; ///< Stores the text title. + Actor mContent; ///< Stores the unselected content. + Actor mFooter; ///< Stores the footer content (typically controls). + + // Display related properties. + Toolkit::Popup::DisplayState mDisplayState; ///< The current display state of the popup. + bool mTailVisible; ///< True if the popup tail should be visible. + Vector3 mTailPosition; ///< The position of the tail. + Toolkit::Popup::ContextualMode mContextualMode; ///< Allows the popup to be layed out adjacent to its parent in different directions. + float mAnimationDuration; ///< The duration of the transition in and out animations. + Toolkit::Popup::AnimationMode mAnimationMode; ///< The animation to use to transition in and out. + Dali::AnimationData mEntryAnimationData; ///< Stores description data that can be used for generating a custom entry animation. + Dali::AnimationData mExitAnimationData; ///< Stores description data that can be used for generating a custom exit animation. + unsigned int mAutoHideDelay; ///< If set, will auto-hide the popup after a specified amount of time. + + // Style related properties: + bool mBackingEnabled; ///< True if a dimmed backing will be used. + Vector4 mBackingColor; ///< The color of the backing. + Actor mPopupBackgroundImage; ///< Stores the background image. + Vector4 mBackgroundOuterBorder; ///< Background external border margin size + float mMargin; ///< Internal margin for popup contents. + std::string mTailUpImage; ///< Image used for the tail for the up direction. + std::string mTailDownImage; ///< Image used for the tail for the down direction. + std::string mTailLeftImage; ///< Image used for the tail for the left direction. + std::string mTailRightImage; ///< Image used for the tail for the right direction. }; } // namespace Internal // Helpers for public-api forwarding methods -inline Toolkit::Internal::Popup& GetImpl(Toolkit::Popup& pub) +inline Toolkit::Internal::Popup& GetImpl( Toolkit::Popup& publicObject ) { - DALI_ASSERT_ALWAYS(pub); + DALI_ASSERT_ALWAYS( publicObject ); - Dali::RefObject& handle = pub.GetImplementation(); + Dali::RefObject& handle = publicObject.GetImplementation(); - return static_cast(handle); + return static_cast( handle ); } -inline const Toolkit::Internal::Popup& GetImpl(const Toolkit::Popup& pub) +inline const Toolkit::Internal::Popup& GetImpl( const Toolkit::Popup& publicObject ) { - DALI_ASSERT_ALWAYS(pub); + DALI_ASSERT_ALWAYS( publicObject ); - const Dali::RefObject& handle = pub.GetImplementation(); + const Dali::RefObject& handle = publicObject.GetImplementation(); - return static_cast(handle); + return static_cast( handle ); } } // namespace Toolkit