X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fpopup%2Fpopup-impl.h;h=f01d498b1adce2abd6b9e9d42884c1b04c95306e;hb=da24507a54c2603006c244b01b5325639baca2d2;hp=747df4cfd923a2bc89d9d099062f5ad5f838d715;hpb=e2eda444afbe82e9591fe198eef339227f90a616;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/popup/popup-impl.h b/dali-toolkit/internal/controls/popup/popup-impl.h index 747df4c..f01d498 100755 --- a/dali-toolkit/internal/controls/popup/popup-impl.h +++ b/dali-toolkit/internal/controls/popup/popup-impl.h @@ -1,27 +1,34 @@ #ifndef __DALI_TOOLKIT_INTERNAL_POPUP_H__ #define __DALI_TOOLKIT_INTERNAL_POPUP_H__ -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include // INTERNAL INCLUDES -#include #include -#include -#include +#include +#include namespace Dali { @@ -29,21 +36,17 @@ 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 */ -class Popup : public ControlImpl +class Popup : public Control { public: @@ -56,87 +59,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::SetTitle( TextView titleActor ) + * @copydoc Toolkit::Popup::SetContent */ - void SetTitle( Toolkit::TextView titleActor ); + void SetContent( Actor content ); /** - * @copydoc Toolkit::Popup::GetTitle + * @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::TextView GetTitle() const; + Toolkit::Popup::DisplayState GetDisplayState() const; /** - * @copydoc Toolkit::Popup::AddButton + * @copydoc Toolkit::Popup::SetTailVisibility */ - void AddButton( Toolkit::Button button ); + void SetTailVisibility( bool visible ); /** - * @copydoc Toolkit::Popup::SetState( PopupState state ) + * @copydoc Toolkit::Popup::IsTailVisible */ - void SetState( Toolkit::Popup::PopupState state ); + const bool IsTailVisible() const; /** - * @copydoc Toolkit::Popup::SetState( PopupState state, float duration ) + * @copydoc Toolkit::Popup::SetTailPosition */ - void SetState( Toolkit::Popup::PopupState state, float duration ); + void SetTailPosition( Vector3 position ); /** - * @copydoc Toolkit::Popup::GetState( ) + * @copydoc Toolkit::Popup::GetTailPosition */ - Toolkit::Popup::PopupState GetState() const; + const Vector3& GetTailPosition() const; /** - * @copydoc Toolkit::Popup::ShowTail + * @copydoc Toolkit::Popup::SetContextualMode */ - void ShowTail(const Vector3& position); + void SetContextualMode( Toolkit::Popup::ContextualMode mode ); /** - * @copydoc Toolkit::Popup::HideTail + * @copydoc Toolkit::Popup::GetContextualMode */ - void HideTail(); + 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 ); /** - * Sets the style of the popup - * @param[in] style The style of the popup + * @copydoc Toolkit::Popup::GetAnimationMode */ - void SetStyle(PopupStyle& style); + Toolkit::Popup::AnimationMode GetAnimationMode() const; /** - * Gets the style of the popup - * @return style of the popup + * @copydoc Toolkit::Popup::SetAutoHideDelay */ - PopupStylePtr GetStyle() const; + 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 + */ + void SetTailUpImage( std::string image ); + + /** + * @copydoc Toolkit::Popup::GetTailUpImage + */ + const std::string& GetTailUpImage() const; + + /** + * @copydoc Toolkit::Popup::SetTailDownImage + */ + void SetTailDownImage( std::string image ); + + /** + * @copydoc Toolkit::Popup::GetTailDownImage + */ + const std::string& GetTailDownImage() const; + + /** + * @copydoc Toolkit::Popup::SetTailLeftImage + */ + void SetTailLeftImage( std::string image ); + + /** + * @copydoc Toolkit::Popup::GetTailLeftImage + */ + const std::string& GetTailLeftImage() const; + + /** + * @copydoc Toolkit::Popup::SetTailRightImage + */ + void SetTailRightImage( std::string image ); + + /** + * @copydoc Toolkit::Popup::GetTailRightImage + */ + const std::string& GetTailRightImage() const; + + /** + * 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. + */ + static void SetProperty( BaseObject* object, Property::Index propertyIndex, const Property::Value& value ); + + /** + * 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. + */ + 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() @@ -146,45 +259,121 @@ 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 SetDefaultBackgroundImage(); + void LayoutPopup(); /** - * Create Dim Backing - * (covers all content behind the dialog) + * @brief Creates or destroys the popup tail based on the current TAIL_DISPLAYED property. + * Also uses the TAIL_POSITION property to position it. */ - void CreateBacking(); + void LayoutTail(); /** - * Create Dialog - * (dialog content resides inside this - buttons, title etc.) + * @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 CreateDialog(); + void LayoutContext( const Vector2& size ); /** - * 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 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 LayoutAnimation(); + + /** + * @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 StartTransitionAnimation( bool transitionIn, bool instantaneous = false ); + + /** + * @brief Invoked once a display state change has completed. + */ + void DisplayStateChangeComplete(); + + /** + * @brief This is called when the auto-hide timer finishes. + * It performs a display-state change to HIDDEN. + * @return True as signal is consumed. + */ + bool OnAutoHideTimeReached(); + + /** + * @brief Create Dimmed Backing (covers all content behind the dialog). + * + * @return The backing control. */ - void HandleStateChange( Toolkit::Popup::PopupState state, float duration ); + Toolkit::Control CreateBacking(); /** - * Invoked once StateChange has completed. + * @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 HandleStateChangeComplete(); + void SetExitAnimationData( const Property::Map& map ); public: // Signals /** * @copydoc Dali::Toolkit::Popup::OutsideTouchedSignal() */ - Toolkit::Popup::TouchedOutsideSignalV2& OutsideTouchedSignal(); + 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::HiddenSignalV2& HiddenSignal(); + Toolkit::Popup::DisplayStateChangeSignalType& HiddenSignal(); /** * Connects a callback function with the object's signals. @@ -200,10 +389,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. @@ -214,12 +403,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. @@ -235,25 +424,32 @@ 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() {} /** - * From ControlImpl; called after a child has been added to the owning actor. + * Called when the popup is directly or indirectly parented to the stage. + */ + virtual void OnControlStageConnection(); + + /** + * 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 ); /** - * @copydoc Toolkit::ControlImpl::OnRelaidOut() + * @copydoc Control::OnRelayOut() */ - virtual void OnRelaidOut( Vector2 size, ActorSizeContainer& container ); + virtual void OnRelayout( const Vector2& size, RelayoutContainer& container ); /** - * @copydoc Toolkit::ControlImpl::OnKeyEvent() + * @copydoc Control::OnSetResizePolicy() */ - virtual bool OnKeyEvent(const KeyEvent& event); + virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension ); /** * @copydoc Control::GetNaturalSize() @@ -263,88 +459,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::OnKeyEvent() + */ + virtual bool OnKeyEvent( const KeyEvent& event ); /** * @copydoc Control::GetNextKeyboardFocusableActor() */ - Actor GetNextKeyboardFocusableActor(Actor currentFocusedActor, Control::KeyboardFocusNavigationDirection direction, bool loopEnabled); + 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) - Actor mPopupBg; ///< Popup Background (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::TextView 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::TouchedOutsideSignalV2 mTouchedOutsideSignalV2; - Toolkit::Popup::HiddenSignalV2 mHiddenSignalV2; +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