X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-selection-popup-impl.h;h=b3739d6cf73f72659a39b3f9e13c35c10c1a405f;hb=66b6b6963d8f8516956550e73f042e686dcec06b;hp=3650977ab344bc8a22354578687e497d70f7e129;hpb=a8f695318919be238c1cf3c94add9567abd82351;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h index 3650977..b3739d6 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_TEXT_SELECTION_POPUP_H__ -#define __DALI_TOOLKIT_INTERNAL_TEXT_SELECTION_POPUP_H__ +#ifndef DALI_TOOLKIT_INTERNAL_TEXT_SELECTION_POPUP_H +#define DALI_TOOLKIT_INTERNAL_TEXT_SELECTION_POPUP_H /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -18,95 +18,82 @@ * */ +// EXTERNAL INCLUDES +#include +#include +#include + // INTERNAL INCLUDES -#include -#include -#include +#include +#include #include #include - -// EXTERNAL INCLUDES -#include -#include +#include +#include +#include namespace Dali { - namespace Toolkit { - namespace Internal { - -namespace -{ - enum PopupCustomisations { POPUP_MAXIMUM_SIZE, - POPUP_MINIMUM_SIZE, OPTION_MAXIMUM_SIZE, OPTION_MINIMUM_SIZE, OPTION_DIVIDER_SIZE }; -} // namespace - class TextSelectionPopup : public Control { public: - struct ButtonRequirement { ButtonRequirement() - : id( Toolkit::TextSelectionPopup::NONE ), - priority( 0u ), + : id(Toolkit::TextSelectionPopup::NONE), + priority(0u), name(), caption(), - icon(), - enabled( false ) - {} - - ButtonRequirement( Toolkit::TextSelectionPopup::Buttons buttonId, - std::size_t buttonPriority, - const std::string& buttonName, - const std::string& buttonCaption, - Dali::Image& buttonIcon, - bool buttonEnabled ) - : id( buttonId ), - priority( buttonPriority ), - name( buttonName ), - caption( buttonCaption ), - icon( buttonIcon ), - enabled( buttonEnabled ) - {} + enabled(false) + { + } + + ButtonRequirement(Toolkit::TextSelectionPopup::Buttons buttonId, + std::size_t buttonPriority, + const std::string& buttonName, + const std::string& buttonCaption, + bool buttonEnabled) + : id(buttonId), + priority(buttonPriority), + name(buttonName), + caption(buttonCaption), + enabled(buttonEnabled) + { + } Toolkit::TextSelectionPopup::Buttons id; - std::size_t priority; - std::string name; - std::string caption; - Dali::Image icon; - bool enabled; + std::size_t priority; + std::string name; + std::string caption; + bool enabled; }; struct ButtonPriorityCompare { - bool operator()( const ButtonRequirement& lhs, const ButtonRequirement& rhs ) const { - return lhs.priority < rhs.priority; - } + bool operator()(const ButtonRequirement& lhs, const ButtonRequirement& rhs) const + { + return lhs.priority < rhs.priority; + } }; /** - * @copydoc Dali::Toollkit::TextSelectionPopup::New() - */ - static Toolkit::TextSelectionPopup New(); - - /** * @brief New constructor with provided buttons to enable. - * @param[in] buttonsToEnable bit mask of buttons to enable + * @param[in] callbackInterface The text popup callback interface which receives the button click callbacks. * @return A handle to the TextSelectionPopup control. */ - static Toolkit::TextSelectionPopup New( Toolkit::TextSelectionPopup::Buttons buttonsToEnable ); + static Toolkit::TextSelectionPopup New(TextSelectionPopupCallbackInterface* callbackInterface); // Properties @@ -116,7 +103,7 @@ public: * @param[in] index The property index. * @param[in] value The new property value. */ - static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ); + static void SetProperty(BaseObject* object, Property::Index index, const Property::Value& value); /** * @brief Called to retrieve a property of an object of this type. @@ -125,23 +112,93 @@ public: * @param[in] index The property index. * @return The current value of the property. */ - static Property::Value GetProperty( BaseObject* object, Property::Index index ); + static Property::Value GetProperty(BaseObject* object, Property::Index index); -private: // From Control + /** + * @brief Toolkit::TextSelectionPopup::SetProperties() + */ + void SetProperties(const Property::Map& properties); + + /** + * @brief Toolkit::TextSelectionPopup::GetProperties() + */ + void GetProperties(Property::Map& properties); + + /** + * @copydoc Toolkit::EnableButtons + */ + void EnableButtons(Toolkit::TextSelectionPopup::Buttons buttonsToEnable); + + /** + * @copydoc Toolkit::TextSelectionPopup::RaiseAbove() + */ + void RaiseAbove(Actor target); /** + * @copydoc Toolkit::TextSelectionPopup::ShowPopup() + */ + void ShowPopup(); + + /** + * @copydoc Toolkiut::TextSelectionPopup::HidePopup() + */ + void HidePopup(); + +private: // From Control + /** * @copydoc Control::OnInitialize() */ - virtual void OnInitialize(); + void OnInitialize() override; + + /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; private: // Implementation + void HideAnimationFinished(Animation& animation); + + /** + * @brief When the cut button is pressed. + * @param[in] button the button pressed + * @return @e true to consume the event. + */ + bool OnCutButtonPressed(Toolkit::Button button); + + /** + * @brief When the copy button is pressed. + * @param[in] button the button pressed + * @return @e true to consume the event. + */ + bool OnCopyButtonPressed(Toolkit::Button button); /** - * @brief When a popup button is pressed + * @brief When the paste button is pressed. * @param[in] button the button pressed - * @return bool + * @return @e true to consume the event. */ - bool OnButtonPressed( Toolkit::Button button ); + bool OnPasteButtonPressed(Toolkit::Button button); + + /** + * @brief When the select button is pressed. + * @param[in] button the button pressed + * @return @e true to consume the event. + */ + bool OnSelectButtonPressed(Toolkit::Button button); + + /** + * @brief When the select all button is pressed. + * @param[in] button the button pressed + * @return @e true to consume the event. + */ + bool OnSelectAllButtonPressed(Toolkit::Button button); + + /** + * @brief When the clipboard button is pressed. + * @param[in] button the button pressed + * @return @e true to consume the event. + */ + bool OnClipboardButtonPressed(Toolkit::Button button); /** * @brief Method to set the dimension or dimension constraint on certain aspects of the Popup. @@ -149,14 +206,14 @@ private: // Implementation * @param[in] settingToCustomise The setting for the PopupCustomisations enum that can be customised * @param[in] dimension The size to customise with */ - void SetDimensionToCustomise( const PopupCustomisations& settingToCustomise, const Size& dimension ); + void SetDimensionToCustomise(const PopupCustomisations& settingToCustomise, const Size& dimension); /** * @brief Method to get the dimension or dimension constraint on certain aspects of the Popup that was previously customised * * @param[in] setting The setting from the PopupCustomisations enum */ - Size GetDimensionToCustomise( const PopupCustomisations& setting ); + Size GetDimensionToCustomise(const PopupCustomisations& setting) const; /** * @brief Sets the image for the given button of the Popup. @@ -164,7 +221,7 @@ private: // Implementation * @param[in] button The button the image should be used for from the Buttons Enum. * @param[in] image The image to use. */ - void SetButtonImage( Toolkit::TextSelectionPopup::Buttons button, Dali::Image image ); + void SetButtonImage(Toolkit::TextSelectionPopup::Buttons button, const std::string& image); /** * @brief Retrieves the image of the given button used by the popup @@ -172,63 +229,132 @@ private: // Implementation * @param[in] button The button to get the image from * @return The image used for that button. */ - Dali::Image GetButtonImage( Toolkit::TextSelectionPopup::Buttons button ); + const std::string& GetButtonImage(Toolkit::TextSelectionPopup::Buttons button) const; + + /** + * @brief Sets the image for the pressed state of a popup option. + * + * @param[in] filename The image filename to use. + */ + void SetPressedImage(const std::string& filename); + + /** + * @brief Gets the image used for the pressed state of a popup option. + * + * @return The image filename used. + */ + std::string GetPressedImage() const; + + /** + * Set option divider padding + * @param[in] padding BEGIN END BOTTOM TOP + */ + void SetOptionDividerPadding(const Padding& padding); + + /** + * Get option divider padding + * @return Padding + */ + Padding GetOptionDividerPadding() const; + + /** + * Set label padding + * @param[in] padding BEGIN END BOTTOM TOP + */ + void SetLabelPadding(const Padding& padding); + + /** + * Get label padding + * @return Padding + */ + Padding GetLabelPadding() const; void CreateOrderedListOfPopupOptions(); - void AddOption( const std::string& name, const std::string& caption, const Image iconImage, bool showDivider, bool showIcons, bool showCaption ); + void AddOption(const ButtonRequirement& button, bool showDivider, bool showIcons, bool showCaption); - std::size_t GetNumberOfEnabledOptions(); + std::size_t GetNumberOfEnabledOptions() const; - void AddPopupOptionsToToolbar( bool showIcons, bool showCaptions ); + void AddPopupOptionsToToolbar(bool showIcons, bool showCaptions); + + /** + * Creates the background-border image + * + * @param[in] propertyMap The properties describing the background-border + */ + void CreateBackgroundBorder(Property::Map& propertyMap); + + /** + * Creates the background image + * + * @param[in] propertyMap The properties describing the background + */ + void CreateBackground(Property::Map& propertyMap); - void CreatePopup(); /** * Construct a new TextField. */ - TextSelectionPopup(); + TextSelectionPopup(TextSelectionPopupCallbackInterface* callbackInterface); /** * A reference counted object may only be deleted by calling Unreference() */ virtual ~TextSelectionPopup(); -private: +protected: + struct PropertyHandler; + + class TextSelectionPopupAccessible : public DevelControl::ControlAccessible + { + public: + using DevelControl::ControlAccessible::ControlAccessible; + + /** + * @copydoc DevelControl::ControlAccessible::CalculateStates() + */ + Dali::Accessibility::States CalculateStates() override; + }; +private: // Undefined copy constructor and assignment operators TextSelectionPopup(const TextSelectionPopup&); TextSelectionPopup& operator=(const TextSelectionPopup& rhs); private: // Data - - Dali::Toolkit::TextSelectionToolbar mToolbar; - Dali::Toolkit::TableView mTableOfButtons; // Actor which holds all the buttons, sensitivity can be set on buttons via this actor + Dali::Toolkit::TableView mTableOfButtons; // Actor which holds all the buttons, sensitivity can be set on buttons via this actor - // Images to be used by the Popup buttons - Image mCutIconImage; - Image mCopyIconImage; - Image mPasteIconImage; - Image mClipboardIconImage; - Image mSelectIconImage; - Image mSelectAllIconImage; + // Images paths to be used by the Popup buttons + std::string mCutIconImage; + std::string mCopyIconImage; + std::string mPasteIconImage; + std::string mClipboardIconImage; + std::string mSelectIconImage; + std::string mSelectAllIconImage; - Size mMaxSize; // Maximum size of the Popup - Size mMinSize; // Minimum size of the Popup + Size mPopupMaxSize; // Maximum size of the Popup + Size mOptionMaxSize; // Maximum size of an Option button + Size mOptionMinSize; // Minimum size of an Option button + Size mOptionDividerSize; // Size of divider line + Padding mOptionDividerPadding; // Padding of divider line - Size mOptionMaxSize; // Maximum size of an Option button - Size mOptionMinSize; // Minimum size of an Option button - Size mOptionDividerSize; // Size of divider line + Vector2 mLabelMinimumSize; // Minimum size of label + Padding mLabelPadding; // Padding of label + Property::Map mLabelTextVisual; // Text visual map of label + bool mEnableScrollBar; // Enable scrollbar std::vector mOrderListOfButtons; // List of buttons in the order to be displayed and a flag to indicate if needed. - Toolkit::TextSelectionPopup::Buttons mEnabledButtons; // stores enabled buttons + Toolkit::TextSelectionPopup::Buttons mEnabledButtons; // stores enabled buttons + Toolkit::TextSelectionPopupCallbackInterface* mCallbackInterface; - Vector4 mLineColor; // Color of the line around the text input popup - Vector4 mIconColor; // Color of the popup icon. - Vector4 mIconPressedColor; // Color of the popup icon when pressed. + std::string mPressedImage; // Image used for the popup option when pressed. + Vector4 mPressedColor; // Color of the popup option when pressed. + float mPressedCornerRadius; // Corner radius of the popup option when pressed. + Vector4 mDividerColor; // Color of the divider between buttons + Vector4 mIconColor; // Color of the popup icon. // Priority of Options/Buttons in the Cut and Paste pop-up, higher priority buttons are displayed first, left to right. std::size_t mSelectOptionPriority; // Position of Select Button @@ -237,28 +363,31 @@ private: // Data std::size_t mCopyOptionPriority; // Position of Copy button std::size_t mPasteOptionPriority; // Position of Paste button std::size_t mClipboardOptionPriority; // Position of Clipboard button + float mFadeInDuration; // Duration of the animation to fade in the Popup + float mFadeOutDuration; // Duration of the animation to fade out the Popup - bool mShowIcons:1; // Flag to show icons - bool mShowCaptions:1; // Flag to show text captions - + bool mShowIcons : 1; // Flag to show icons + bool mShowCaptions : 1; // Flag to show text captions + bool mPopupShowing : 1; // Flag to indicate Popup showing + bool mButtonsChanged : 1; // Flag to indicate the Popup Buttons have changed }; } // namespace Internal // Helpers for public-api forwarding methods -inline Toolkit::Internal::TextSelectionPopup& GetImpl( Toolkit::TextSelectionPopup& textSelectionPopup ) +inline Toolkit::Internal::TextSelectionPopup& GetImpl(Toolkit::TextSelectionPopup& textSelectionPopup) { - DALI_ASSERT_ALWAYS( textSelectionPopup ); + DALI_ASSERT_ALWAYS(textSelectionPopup); Dali::RefObject& handle = textSelectionPopup.GetImplementation(); return static_cast(handle); } -inline const Toolkit::Internal::TextSelectionPopup& GetImpl( const Toolkit::TextSelectionPopup& textSelectionPopup ) +inline const Toolkit::Internal::TextSelectionPopup& GetImpl(const Toolkit::TextSelectionPopup& textSelectionPopup) { - DALI_ASSERT_ALWAYS( textSelectionPopup ); + DALI_ASSERT_ALWAYS(textSelectionPopup); const Dali::RefObject& handle = textSelectionPopup.GetImplementation(); @@ -269,5 +398,4 @@ inline const Toolkit::Internal::TextSelectionPopup& GetImpl( const Toolkit::Text } // namespace Dali -#endif // __DALI_TOOLKIT_INTERNAL_TEXT_SELECTION_POPUP_H__ - +#endif // DALI_TOOLKIT_INTERNAL_TEXT_SELECTION_POPUP_H