651b9815376ad35e41ee57c9c78ec00be3cfdbe9
[platform/core/uifw/dali-adaptor.git] / dali / dali-bridge / src / BridgeText.cpp
1 #include "BridgeText.hpp"
2
3 #include <dali/internal/input/common/imf-manager-impl.h>
4
5 using namespace Dali::Accessibility;
6
7 void BridgeText::RegisterInterfaces()
8 {
9   DBus::DBusInterfaceDescription desc{ATSPI_DBUS_INTERFACE_TEXT};
10   AddFunctionToInterface( desc, "GetText", &BridgeText::GetText );
11   AddGetPropertyToInterface( desc, "CharacterCount", &BridgeText::GetCharacterCount );
12   AddGetPropertyToInterface( desc, "CaretOffset", &BridgeText::GetCaretOffset );
13   AddFunctionToInterface( desc, "SetCaretOffset", &BridgeText::SetCaretOffset );
14   AddFunctionToInterface( desc, "GetTextAtOffset", &BridgeText::GetTextAtOffset );
15   AddFunctionToInterface( desc, "GetSelection", &BridgeText::GetSelection );
16   AddFunctionToInterface( desc, "SetSelection", &BridgeText::SetSelection );
17   AddFunctionToInterface( desc, "RemoveSelection", &BridgeText::RemoveSelection );
18   dbusServer.addInterface( "/", desc, true );
19 }
20
21 Text* BridgeText::FindSelf() const
22 {
23   auto s = BridgeBase::FindSelf();
24   assert( s );
25   auto s2 = dynamic_cast< Text* >( s );
26   if( !s2 )
27     throw AccessibleError{"object " + s->GetAddress().ToString() + " doesn't have Text interface"};
28   return s2;
29 }
30
31 DBus::ValueOrError< std::string > BridgeText::GetText( int startOffset, int endOffset )
32 {
33   return FindSelf()->GetText( startOffset, endOffset );
34 }
35
36 DBus::ValueOrError< int32_t > BridgeText::GetCharacterCount()
37 {
38   return FindSelf()->GetCharacterCount();
39 }
40
41 DBus::ValueOrError< int32_t > BridgeText::GetCaretOffset()
42 {
43   auto imfManager = Dali::Internal::Adaptor::ImfManager::Get();
44   return imfManager.GetCursorPosition();
45 }
46
47 DBus::ValueOrError< bool > BridgeText::SetCaretOffset( int32_t offset )
48 {
49   auto imfManager = Dali::Internal::Adaptor::ImfManager::Get();
50   imfManager.SetCursorPosition( offset );
51   return true;
52 }
53
54 DBus::ValueOrError< std::string, int, int > BridgeText::GetTextAtOffset( int32_t offset, uint32_t boundary )
55 {
56   auto r = FindSelf()->GetTextAtOffset( offset, static_cast< TextBoundary >( boundary ) );
57   return {r.content, static_cast< int >( r.startOffset ), static_cast< int >( r.endOffset )};
58 }
59
60 DBus::ValueOrError< int, int > BridgeText::GetSelection( int32_t selectionNum )
61 {
62   auto r = FindSelf()->GetSelection( selectionNum );
63   return {static_cast< int >( r.startOffset ), static_cast< int >( r.endOffset )};
64 }
65
66 DBus::ValueOrError< bool > BridgeText::RemoveSelection( int32_t selectionNum )
67 {
68   return FindSelf()->RemoveSelection( selectionNum );
69 }
70
71 DBus::ValueOrError< bool > BridgeText::SetSelection( int32_t selectionNum, int32_t startOffset, int32_t endOffset )
72 {
73   return FindSelf()->SetSelection( selectionNum, startOffset, endOffset );
74 }