/*
- * Copyright (c) 2019 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.
*
*/
- // CLASS HEADER
+// CLASS HEADER
- //INTERNAL INCLUDES
+//INTERNAL INCLUDES
+#include <dali/devel-api/atspi-interfaces/accessible.h>
+#include <dali/devel-api/atspi-interfaces/action.h>
+#include <dali/devel-api/atspi-interfaces/application.h>
+#include <dali/devel-api/atspi-interfaces/collection.h>
+#include <dali/devel-api/atspi-interfaces/component.h>
+#include <dali/devel-api/atspi-interfaces/editable-text.h>
+#include <dali/devel-api/atspi-interfaces/hyperlink.h>
+#include <dali/devel-api/atspi-interfaces/hypertext.h>
+#include <dali/devel-api/atspi-interfaces/selection.h>
+#include <dali/devel-api/atspi-interfaces/text.h>
+#include <dali/devel-api/atspi-interfaces/value.h>
+#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
#include <dali/internal/accessibility/bridge/accessibility-common.h>
-#include <third-party/libunibreak/wordbreak.h>
#include <third-party/libunibreak/linebreak.h>
+#include <third-party/libunibreak/wordbreak.h>
using namespace Dali::Accessibility;
-std::vector< std::string > Accessible::GetInterfaces()
+std::vector<std::string> Accessible::GetInterfaces() const
{
- std::vector< std::string > tmp;
- tmp.push_back(AtspiDbusInterfaceAccessible);
- if (dynamic_cast<Collection*>(this))
- {
- tmp.push_back(AtspiDbusInterfaceCollection);
- }
- if (dynamic_cast<Text*>(this))
- {
- tmp.push_back(AtspiDbusInterfaceText);
- }
- if (dynamic_cast<EditableText*>(this))
- {
- tmp.push_back(AtspiDbusInterfaceEditableText);
- }
- if (dynamic_cast<Value*>(this))
- {
- tmp.push_back(AtspiDbusInterfaceValue);
- }
- if (dynamic_cast<Component*>(this))
- {
- tmp.push_back(AtspiDbusInterfaceComponent);
- }
- if (auto d = dynamic_cast<Action*>(this))
+ std::vector<std::string> tmp;
+ tmp.push_back(AtspiDbusInterfaceAccessible);
+ if(dynamic_cast<const Collection*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceCollection);
+ }
+ if(dynamic_cast<const Text*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceText);
+ }
+ if(dynamic_cast<const EditableText*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceEditableText);
+ }
+ if(dynamic_cast<const Value*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceValue);
+ }
+ if(dynamic_cast<const Component*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceComponent);
+ }
+ if(auto action = dynamic_cast<const Action*>(this))
+ {
+ if(action->GetActionCount() > 0)
{
- if (d->GetActionCount() > 0)
- {
- tmp.push_back(AtspiDbusInterfaceAction);
- }
+ tmp.push_back(AtspiDbusInterfaceAction);
}
- return tmp;
+ }
+ if(dynamic_cast<const Selection*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceSelection);
+ }
+ if(dynamic_cast<const Hypertext*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceHypertext);
+ }
+ if(dynamic_cast<const Hyperlink*>(this))
+ {
+ tmp.push_back(AtspiDbusInterfaceHyperlink);
+ }
+ return tmp;
}
Accessible::Accessible()
{
}
-Accessible::~Accessible()
+Accessible::~Accessible() noexcept
{
- auto b = bridgeData.lock();
- if (b)
- b->knownObjects.erase(this);
+ auto handle = mBridgeData.lock();
+ if(handle)
+ {
+ handle->mKnownObjects.erase(this);
+ }
}
void Accessible::EmitActiveDescendantChanged(Accessible* obj, Accessible* child)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->EmitActiveDescendantChanged(obj, child);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitActiveDescendantChanged(obj, child);
+ }
}
-void Accessible::EmitStateChanged(State state, int newValue1, int newValue2)
+void Accessible::EmitStateChanged(State state, int newValue, int reserved)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->EmitStateChanged(this, state, newValue1, newValue2);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitStateChanged(this, state, newValue, reserved);
+ }
}
-void Accessible::EmitShowing(bool showing)
+void Accessible::EmitShowing(bool isShowing)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->EmitStateChanged(this, State::SHOWING, showing ? 1 : 0, 0);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitStateChanged(this, State::SHOWING, isShowing ? 1 : 0, 0);
+ }
}
-void Accessible::EmitVisible(bool visible)
+void Accessible::EmitVisible(bool isVisible)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->EmitStateChanged(this, State::VISIBLE, visible ? 1 : 0, 0);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitStateChanged(this, State::VISIBLE, isVisible ? 1 : 0, 0);
+ }
}
-void Accessible::EmitHighlighted(bool set)
+void Accessible::EmitHighlighted(bool isHighlighted)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->EmitStateChanged(this, State::HIGHLIGHTED, set ? 1 : 0, 0);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitStateChanged(this, State::HIGHLIGHTED, isHighlighted ? 1 : 0, 0);
+ }
}
-void Accessible::EmitFocused(bool set)
+void Accessible::EmitFocused(bool isFocused)
{
- if (auto b = GetBridgeData()) {
- b->bridge->EmitStateChanged(this, State::FOCUSED, set ? 1 : 0, 0);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitStateChanged(this, State::FOCUSED, isFocused ? 1 : 0, 0);
+ }
}
void Accessible::EmitTextInserted(unsigned int position, unsigned int length, const std::string& content)
{
- if (auto b = GetBridgeData()) {
- b->bridge->EmitTextChanged(this, TextChangedState::INSERTED, position, length, content);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitTextChanged(this, TextChangedState::INSERTED, position, length, content);
+ }
}
void Accessible::EmitTextDeleted(unsigned int position, unsigned int length, const std::string& content)
{
- if (auto b = GetBridgeData()) {
- b->bridge->EmitTextChanged(this, TextChangedState::DELETED, position, length, content);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitTextChanged(this, TextChangedState::DELETED, position, length, content);
+ }
}
-void Accessible::EmitTextCaretMoved(unsigned int cursorPosition)
+void Accessible::EmitTextCursorMoved(unsigned int cursorPosition)
{
- if (auto b = GetBridgeData()) {
- b->bridge->EmitCaretMoved(this, cursorPosition);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitCursorMoved(this, cursorPosition);
+ }
}
-void Accessible::Emit(WindowEvent we, unsigned int detail1)
+
+void Accessible::EmitMovedOutOfScreen(ScreenRelativeMoveType type)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->Emit(this, we, detail1);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitMovedOutOfScreen(this, type);
+ }
}
-void Accessible::Emit(ObjectPropertyChangeEvent ev)
+
+void Accessible::Emit(WindowEvent event, unsigned int detail)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->Emit(this, ev);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->Emit(this, event, detail);
+ }
}
-
-void Accessible::EmitBoundsChanged(Rect<> rect)
+void Accessible::Emit(ObjectPropertyChangeEvent event)
{
- if (auto b = GetBridgeData())
- {
- b->bridge->EmitBoundsChanged(this, rect);
- }
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->Emit(this, event);
+ }
}
-std::vector< Accessible* > Accessible::GetChildren()
+void Accessible::EmitBoundsChanged(Rect<> rect)
{
- std::vector< Accessible* > tmp(GetChildCount());
- for (auto i = 0u; i < tmp.size(); ++i)
- {
- tmp[i] = GetChildAtIndex(i);
- }
- return tmp;
+ if(auto bridgeData = GetBridgeData())
+ {
+ bridgeData->mBridge->EmitBoundsChanged(this, rect);
+ }
}
-std::shared_ptr< Bridge::Data > Accessible::GetBridgeData()
+std::shared_ptr<Bridge::Data> Accessible::GetBridgeData() const
{
- auto b = bridgeData.lock();
- if (!b)
- {
- auto p = Bridge::GetCurrentBridge();
- b = p->data;
- }
- return b;
+ auto handle = mBridgeData.lock();
+ if(!handle)
+ {
+ auto bridge = Bridge::GetCurrentBridge();
+ handle = bridge->mData;
+ }
+ return handle;
}
-Address Accessible::GetAddress()
+Address Accessible::GetAddress() const
{
- auto b = bridgeData.lock();
- if (!b)
+ auto handle = mBridgeData.lock();
+ if(!handle)
+ {
+ handle = GetBridgeData();
+ if(handle)
{
- b = GetBridgeData();
- if (b)
- b->bridge->RegisterOnBridge(this);
+ handle->mBridge->RegisterOnBridge(this);
}
- std::ostringstream tmp;
- tmp << this;
- return { b ? b->busName : "", tmp.str() };
+ }
+ std::ostringstream tmp;
+ tmp << this;
+ return {handle ? handle->mBusName : "", tmp.str()};
}
-void Bridge::RegisterOnBridge(Accessible* obj)
+void Bridge::RegisterOnBridge(const Accessible* object)
{
- assert(!obj->bridgeData.lock() || obj->bridgeData.lock() == data);
- if (!obj->bridgeData.lock())
- {
- assert(data);
- data->knownObjects.insert(obj);
- obj->bridgeData = data;
- }
+ assert(!object->mBridgeData.lock() || object->mBridgeData.lock() == mData);
+ if(!object->mBridgeData.lock())
+ {
+ assert(mData);
+ mData->mKnownObjects.insert(object);
+ object->mBridgeData = mData;
+ }
}
-bool Accessible::IsProxy()
+bool Accessible::IsHidden() const
{
- return false;
+ return false;
}
-Accessible* Accessible::GetDefaultLabel()
+bool Accessible::IsProxy() const
{
- return this;
+ return false;
}
-void Accessible::NotifyAccessibilityStateChange(Dali::Accessibility::States states, bool doRecursive)
+void Accessible::NotifyAccessibilityStateChange(Dali::Accessibility::States states, bool isRecursive)
{
- if (auto b = GetBridgeData())
+ if(auto data = GetBridgeData())
+ {
+ for(auto i = 0u; i < static_cast<unsigned int>(Dali::Accessibility::State::MAX_COUNT); i++)
+ {
+ auto index = static_cast<Dali::Accessibility::State>(i);
+ if(states[index])
+ {
+ data->mBridge->EmitStateChanged(this, index, GetStates()[index], 0);
+ }
+ }
+
+ if(isRecursive)
{
- auto s = GetStates() & states;
- for (auto i = 0u; i < s.size(); i++)
- {
- auto index = static_cast<Dali::Accessibility::State>(i);
- if (s[index])
- b->bridge->EmitStateChanged(this, index, 1, 0);
- }
- if (doRecursive)
- {
- auto children = GetChildren();
- for (auto c : children)
- c->NotifyAccessibilityStateChange(states, doRecursive);
- }
+ auto children = GetChildren();
+ for(auto iter : children)
+ {
+ iter->NotifyAccessibilityStateChange(states, isRecursive);
+ }
}
+ }
}
-void Accessible::FindWordSeparationsUtf8(const utf8_t* s, size_t length, const char* language, char* breaks)
+void Accessible::FindWordSeparationsUtf8(const utf8_t* string, size_t length, const char* language, char* breaks)
{
- set_wordbreaks_utf8(s, length, language, breaks);
+ set_wordbreaks_utf8(string, length, language, breaks);
}
-void Accessible::FindLineSeparationsUtf8(const utf8_t* s, size_t length, const char* language, char* breaks)
+void Accessible::FindLineSeparationsUtf8(const utf8_t* string, size_t length, const char* language, char* breaks)
{
- set_linebreaks_utf8(s, length, language, breaks);
+ set_linebreaks_utf8(string, length, language, breaks);
}