Add support for Animation::EndAction::BakeFinal to builder
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / text-view / text-view-impl.cpp
index deda3d1..6bfaed3 100644 (file)
@@ -32,6 +32,8 @@ namespace Dali
 namespace Toolkit
 {
 
+const Property::Index TextView::PROPERTY_MARKUP_ENABLED( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX );
+
 namespace Internal
 {
 
@@ -64,6 +66,8 @@ TypeRegistration typeRegistration( typeid(Toolkit::TextView), typeid(Toolkit::Co
 
 SignalConnectorType signalConnector1( typeRegistration, Toolkit::TextView::SIGNAL_TEXT_SCROLLED , &TextView::DoConnectSignal );
 
+PropertyRegistration property1( typeRegistration, "markup-enabled", Toolkit::TextView::PROPERTY_MARKUP_ENABLED, Property::BOOLEAN, &TextView::SetProperty, &TextView::GetProperty );
+
 /**
  * Whether the text-view-processor operation sets, inserts, replaces, removes text.
  *
@@ -136,7 +140,7 @@ void TextView::SetText( const std::string& text )
 {
   // Creates a styled text with the markup or plain string.
   MarkupProcessor::StyledTextArray styledText;
-  MarkupProcessor::GetStyledTextArray( text, styledText );
+  MarkupProcessor::GetStyledTextArray( text, styledText, IsMarkupProcessingEnabled() );
 
   // Calls SetText() with the styled text array.
   SetText( styledText );
@@ -172,7 +176,7 @@ void TextView::InsertTextAt( std::size_t position, const std::string& text )
 {
   // Creates a styled text with the markup or plain string.
   MarkupProcessor::StyledTextArray styledText;
-  MarkupProcessor::GetStyledTextArray( text, styledText );
+  MarkupProcessor::GetStyledTextArray( text, styledText, IsMarkupProcessingEnabled() );
 
   // Calls InsertTextAt() with the styled text array.
   InsertTextAt( position, styledText );
@@ -203,7 +207,7 @@ void TextView::ReplaceTextFromTo( const std::size_t position, const std::size_t
 {
   // Creates a styled text with the markup or plain string.
   MarkupProcessor::StyledTextArray styledText;
-  MarkupProcessor::GetStyledTextArray( text, styledText );
+  MarkupProcessor::GetStyledTextArray( text, styledText, IsMarkupProcessingEnabled() );
 
   // Calls ReplaceTextFromTo() with the styled text array.
   ReplaceTextFromTo( position, numberOfCharacters, styledText );
@@ -536,7 +540,7 @@ void TextView::SetEllipsizeText( const std::string& ellipsizeText )
 {
   // Creates a styled text with the markup or plain string.
   MarkupProcessor::StyledTextArray styledText;
-  MarkupProcessor::GetStyledTextArray( ellipsizeText, styledText );
+  MarkupProcessor::GetStyledTextArray( ellipsizeText, styledText, IsMarkupProcessingEnabled() );
 
   SetEllipsizeText( styledText );
 }
@@ -738,6 +742,16 @@ bool TextView::IsSnapshotModeEnabled() const
   return mVisualParameters.mSnapshotModeEnabled;
 }
 
+void TextView::SetMarkupProcessingEnabled( bool enable )
+{
+  mMarkUpEnabled = enable;
+}
+
+bool TextView::IsMarkupProcessingEnabled() const
+{
+  return mMarkUpEnabled;
+}
+
 void TextView::SetScrollEnabled( const bool enable )
 {
   if( enable != mVisualParameters.mScrollEnabled )
@@ -842,11 +856,12 @@ TextView::LayoutParameters::LayoutParameters()
   mVerticalAlignment( Toolkit::Alignment::VerticalCenter ),
   mLineJustification( Toolkit::TextView::Left ),
   mLineHeightOffset( 0.f ),
-  mEllipsizeText()
+  mEllipsizeText(),
+  mMarkUpEnabled( false )
 {
   // Sets ellipsize text
   MarkupProcessor::StyledTextArray styledEllipsize;
-  MarkupProcessor::GetStyledTextArray( std::string( "..." ), mEllipsizeText );
+  MarkupProcessor::GetStyledTextArray( std::string( "..." ), mEllipsizeText, false );
 }
 
 TextView::LayoutParameters::LayoutParameters( const Toolkit::TextView::MultilinePolicy   multilinePolicy,
@@ -855,7 +870,8 @@ TextView::LayoutParameters::LayoutParameters( const Toolkit::TextView::Multiline
                                               const Toolkit::Alignment::Type             alignmentType,
                                               const Toolkit::TextView::LineJustification lineJustification,
                                               const float                                lineHeightOffset,
-                                              const std::string&                         ellipsizeText )
+                                              const std::string&                         ellipsizeText,
+                                              const bool                                 markUpEnabled )
 : mMultilinePolicy( multilinePolicy ),
   mWidthExceedPolicy( widthExceedPolicy ),
   mHeightExceedPolicy( heightExceedPolicy ),
@@ -863,7 +879,8 @@ TextView::LayoutParameters::LayoutParameters( const Toolkit::TextView::Multiline
   mVerticalAlignment(),
   mLineJustification( lineJustification ),
   mLineHeightOffset( lineHeightOffset ),
-  mEllipsizeText()
+  mEllipsizeText(),
+  mMarkUpEnabled( markUpEnabled )
 {
   // Sets alignment
   Toolkit::Alignment::Type horizontalAlignment( ( alignmentType & Toolkit::Alignment::HorizontalLeft ? Toolkit::Alignment::HorizontalLeft :
@@ -878,7 +895,7 @@ TextView::LayoutParameters::LayoutParameters( const Toolkit::TextView::Multiline
 
   // Sets ellipsize text
   MarkupProcessor::StyledTextArray styledEllipsize;
-  MarkupProcessor::GetStyledTextArray( ellipsizeText, mEllipsizeText );
+  MarkupProcessor::GetStyledTextArray( ellipsizeText, mEllipsizeText, mMarkUpEnabled );
 }
 
 TextView::LayoutParameters::LayoutParameters( const TextView::LayoutParameters& layoutParameters )
@@ -889,7 +906,8 @@ TextView::LayoutParameters::LayoutParameters( const TextView::LayoutParameters&
   mVerticalAlignment( layoutParameters.mVerticalAlignment ),
   mLineJustification( layoutParameters.mLineJustification ),
   mLineHeightOffset( layoutParameters.mLineHeightOffset ),
-  mEllipsizeText( layoutParameters.mEllipsizeText )
+  mEllipsizeText( layoutParameters.mEllipsizeText ),
+  mMarkUpEnabled( layoutParameters.mMarkUpEnabled )
 {
 }
 
@@ -903,6 +921,7 @@ TextView::LayoutParameters& TextView::LayoutParameters::operator=( const TextVie
   mLineJustification = layoutParameters.mLineJustification;
   mLineHeightOffset = layoutParameters.mLineHeightOffset;
   mEllipsizeText = layoutParameters.mEllipsizeText;
+  mMarkUpEnabled = layoutParameters.mMarkUpEnabled;
 
   return *this;
 }
@@ -990,7 +1009,8 @@ TextView::TextView()
                      static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
                      Toolkit::TextView::Left,
                      PointSize( 0.f ),
-                     std::string( "..." ) ),
+                     std::string( "..." ),
+                     false ),
   mVisualParameters(),
   mRelayoutData(),
   mRelayoutOperations( NO_RELAYOUT ),
@@ -1002,7 +1022,8 @@ TextView::TextView()
   mRenderTask(),
   mPanGestureDetector(),
   mLockPreviousSnapshotMode( false ),
-  mPreviousSnapshotModeEnabled( false )
+  mPreviousSnapshotModeEnabled( false ),
+  mMarkUpEnabled( false )
 {
   TextViewProcessor::CreateWordTextInfo( mLayoutParameters.mEllipsizeText,
                                          mRelayoutData.mTextLayoutInfo.mEllipsizeLayoutInfo );
@@ -2092,6 +2113,42 @@ void TextView::OnAlignmentPropertySet( Property::Index propertyIndex, Property::
   }
 }
 
+void TextView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
+{
+  Toolkit::TextView textView = Toolkit::TextView::DownCast( Dali::BaseHandle( object ) );
+
+  if ( textView && ( index == Toolkit::TextView::PROPERTY_MARKUP_ENABLED ) )
+  {
+    Internal::TextView& textViewImpl( GetImpl( textView ) );
+    bool newValue( value.Get<bool>() );
+    if( newValue != textViewImpl.IsMarkupProcessingEnabled() )
+    {
+      textViewImpl.SetMarkupProcessingEnabled( newValue );
+      if( newValue )
+      {
+        // If markup processing has been enabled, Ensure current text is reprocessed.
+        const std::string& currentText( textViewImpl.GetText() );
+        if( ! currentText.empty() )
+        {
+          textViewImpl.SetText( currentText );
+        }
+      }
+    }
+  }
+}
+
+Property::Value TextView::GetProperty( BaseObject* object, Property::Index propertyIndex )
+{
+  Toolkit::TextView textView = Toolkit::TextView::DownCast( Dali::BaseHandle( object ) );
+
+  if ( textView && ( propertyIndex == Toolkit::TextView::PROPERTY_MARKUP_ENABLED ) )
+  {
+    return Property::Value( GetImpl( textView ).mMarkUpEnabled );
+  }
+
+  return Property::Value();
+}
+
 } // namespace Internal
 
 } // namespace Toolkit