2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali-toolkit/internal/text/hidden-text.h>
22 #include <dali-toolkit/public-api/controls/text-controls/text-editor.h>
24 using namespace Dali::Toolkit;
26 const int DEFAULT_SHOW_DURATION = 1000;
34 const char* const PROPERTY_MODE = "mode";
35 const char* const PROPERTY_SUBSTITUTE_CHARACTER = "substituteCharacter";
36 const char* const PROPERTY_SUBSTITUTE_COUNT = "substituteCount";
37 const char* const PROPERTY_SHOW_DURATION = "showDuration";
39 HiddenText::HiddenText(Observer* observer)
40 : mObserver(observer),
41 mHideMode(static_cast<int>(Toolkit::HiddenInput::Mode::HIDE_NONE)),
42 mSubstituteText(STAR),
43 mDisplayDuration(DEFAULT_SHOW_DURATION),
47 mTimer = Timer::New(mDisplayDuration);
48 mTimer.TickSignal().Connect(this, &HiddenText::OnTick);
51 void HiddenText::SetProperties(const Property::Map& map)
53 const Property::Map::SizeType count = map.Count();
55 for(Property::Map::SizeType position = 0; position < count; ++position)
57 KeyValuePair keyValue = map.GetKeyValue(position);
58 Property::Key& key = keyValue.first;
59 Property::Value& value = keyValue.second;
61 if(key == Toolkit::HiddenInput::Property::MODE || key == PROPERTY_MODE)
65 else if(key == Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER || key == PROPERTY_SUBSTITUTE_CHARACTER)
67 value.Get(mSubstituteText);
69 else if(key == Toolkit::HiddenInput::Property::SUBSTITUTE_COUNT || key == PROPERTY_SUBSTITUTE_COUNT)
71 value.Get(mSubstituteCount);
73 else if(key == Toolkit::HiddenInput::Property::SHOW_LAST_CHARACTER_DURATION || key == PROPERTY_SHOW_DURATION)
75 value.Get(mDisplayDuration);
80 void HiddenText::GetProperties(Property::Map& map)
82 map[Toolkit::HiddenInput::Property::MODE] = mHideMode;
83 map[Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER] = mSubstituteText;
84 map[Toolkit::HiddenInput::Property::SUBSTITUTE_COUNT] = mSubstituteCount;
85 map[Toolkit::HiddenInput::Property::SHOW_LAST_CHARACTER_DURATION] = mDisplayDuration;
88 void HiddenText::Substitute(const Vector<Character>& source, Vector<Character>& destination)
90 const Length characterCount = source.Count();
92 destination.Resize(characterCount);
94 uint32_t* begin = destination.Begin();
95 uint32_t* end = begin + characterCount;
96 uint32_t* hideStart = NULL;
97 uint32_t* hideEnd = NULL;
98 uint32_t* sourcePos = source.Begin();
102 case Toolkit::HiddenInput::Mode::HIDE_NONE:
108 case Toolkit::HiddenInput::Mode::HIDE_ALL:
114 case Toolkit::HiddenInput::Mode::HIDE_COUNT:
117 hideEnd = begin + mSubstituteCount;
120 case Toolkit::HiddenInput::Mode::SHOW_COUNT:
122 hideStart = begin + mSubstituteCount;
126 case Toolkit::HiddenInput::Mode::SHOW_LAST_CHARACTER:
128 if(mPreviousTextCount < characterCount)
132 if(mDisplayDuration > 0)
134 mTimer.SetInterval(mDisplayDuration);
150 for(; begin < end; ++begin)
152 if(begin >= hideStart && begin < hideEnd)
154 *begin = static_cast<uint32_t>(mSubstituteText);
159 *begin = *sourcePos++;
162 mPreviousTextCount = characterCount;
165 bool HiddenText::OnTick()
167 if(mObserver != NULL)
169 mObserver->DisplayTimeExpired();
177 } // namespace Toolkit