7 class AppAccessible : public virtual Dali::Accessibility::Accessible, public virtual Dali::Accessibility::Collection
10 Dali::Accessibility::EmptyAccessibleWithAddress parent;
11 std::vector< Dali::Accessibility::Accessible* > children;
14 std::string GetName() override
18 std::string GetDescription() override
22 Dali::Accessibility::Accessible* GetParent() override
26 size_t GetChildCount() override
28 return children.size();
30 Dali::Accessibility::Accessible* GetChildAtIndex( size_t index ) override
32 auto s = children.size();
34 throw Dali::Accessibility::AccessibleError{"invalid index " + std::to_string( index ) + " for object with " + std::to_string( s ) + " children"};
35 return children[index];
37 size_t GetIndexInParent() override
39 throw Dali::Accessibility::AccessibleError{"can't call GetIndexInParent on application object"};
41 Dali::Accessibility::Role GetRole() override
43 return Dali::Accessibility::Role::Application;
45 Dali::Accessibility::States GetStates() override
49 Dali::Accessibility::Attributes GetAttributes() override
53 Dali::Accessibility::Accessible* getActiveWindow()
55 return children.empty() ? nullptr : children[0];
59 class BridgeBase : public Dali::Accessibility::Bridge
62 const std::string& GetBusName() const override;
63 void SetApplicationChild( Dali::Accessibility::Accessible* root ) override;
64 Dali::Accessibility::Accessible* GetApplication() const override
69 template < typename SELF, typename... RET, typename... ARGS >
70 void AddFunctionToInterface(
71 DBus::DBusInterfaceDescription& desc, const std::string& funcName,
72 DBus::ValueOrError< RET... > ( SELF::*funcPtr )( ARGS... ) )
74 desc.addMethod< DBus::ValueOrError< RET... >( ARGS... ) >( funcName,
75 [=]( ARGS... args ) -> DBus::ValueOrError< RET... > {
78 return ( dynamic_cast< SELF* >( this )->*funcPtr )( std::move( args )... );
80 catch( Dali::Accessibility::AccessibleError& e )
82 return DBus::Error{e.what()};
86 template < typename T, typename SELF >
87 void AddGetPropertyToInterface( DBus::DBusInterfaceDescription& desc,
88 const std::string& funcName, T ( SELF::*funcPtr )() )
90 desc.addProperty< T >( funcName,
91 [=]() -> DBus::ValueOrError< T > {
94 return ( dynamic_cast< SELF* >( this )->*funcPtr )();
96 catch( Dali::Accessibility::AccessibleError& e )
98 return DBus::Error{e.what()};
103 template < typename T, typename SELF >
104 void AddSetPropertyToInterface( DBus::DBusInterfaceDescription& desc,
105 const std::string& funcName, void ( SELF::*funcPtr )( T ) )
107 desc.addProperty< T >( funcName, {},
108 [=]( T t ) -> DBus::ValueOrError< void > {
111 ( dynamic_cast< SELF* >( this )->*funcPtr )( std::move( t ) );
114 catch( Dali::Accessibility::AccessibleError& e )
116 return DBus::Error{e.what()};
120 template < typename T, typename T1, typename SELF >
121 void AddGetSetPropertyToInterface( DBus::DBusInterfaceDescription& desc,
122 const std::string& funcName, T1 ( SELF::*funcPtrGet )(), DBus::ValueOrError< void > ( SELF::*funcPtrSet )( T ) )
124 desc.addProperty< T >( funcName,
125 [=]() -> DBus::ValueOrError< T > {
128 return ( dynamic_cast< SELF* >( this )->*funcPtrGet )();
130 catch( Dali::Accessibility::AccessibleError& e )
132 return DBus::Error{e.what()};
135 [=]( T t ) -> DBus::ValueOrError< void > {
138 ( dynamic_cast< SELF* >( this )->*funcPtrSet )( std::move( t ) );
141 catch( Dali::Accessibility::AccessibleError& e )
143 return DBus::Error{e.what()};
147 template < typename T, typename T1, typename SELF >
148 void AddGetSetPropertyToInterface( DBus::DBusInterfaceDescription& desc,
149 const std::string& funcName, T1 ( SELF::*funcPtrGet )(), void ( SELF::*funcPtrSet )( T ) )
151 desc.addProperty< T >( funcName,
152 [=]() -> DBus::ValueOrError< T > {
155 return ( dynamic_cast< SELF* >( this )->*funcPtrGet )();
157 catch( Dali::Accessibility::AccessibleError& e )
159 return DBus::Error{e.what()};
162 [=]( T t ) -> DBus::ValueOrError< void > {
165 ( dynamic_cast< SELF* >( this )->*funcPtrSet )( std::move( t ) );
168 catch( Dali::Accessibility::AccessibleError& e )
170 return DBus::Error{e.what()};
174 static std::string StripPrefix( const std::string& path );
176 Dali::Accessibility::Accessible* Find( const std::string& path ) const;
177 Dali::Accessibility::Accessible* Find( const Dali::Accessibility::Address& ptr ) const;
178 Dali::Accessibility::Accessible* FindSelf() const;
179 Dali::Accessibility::Accessible* FindByPath( const std::string& name ) const override;
180 void SetApplicationName( std::string name ) override
182 application.name = std::move( name );
186 mutable AppAccessible application;
189 void IdSet( int id );
192 using CacheElementType = std::tuple<
193 Dali::Accessibility::Address, Dali::Accessibility::Address, Dali::Accessibility::Address,
194 std::vector< Dali::Accessibility::Address >,
195 std::vector< std::string >,
197 Dali::Accessibility::Role,
199 std::array< uint32_t, 2 > >;
200 DBus::ValueOrError< std::vector< CacheElementType > > GetItems();
201 CacheElementType CreateCacheElement( Dali::Accessibility::Accessible* item );
205 virtual ~BridgeBase() = default;
207 ForceUpResult ForceUp() override;
208 void ForceDown() override;
210 DBus::DBusServer dbusServer;
211 std::shared_ptr< DBus::EldbusConnection > con;