Caffa  1.1.0
C++ Application Framework for Embedded Systems with introspection
cafObjectPerformer.h
1 // ##################################################################################################
2 //
3 // Copyright (C) 2023- Kontur AS
4 //
5 // GNU Lesser General Public License Usage
6 // This library is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU Lesser General Public License as published by
8 // the Free Software Foundation; either version 2.1 of the License, or
9 // (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful, but WITHOUT ANY
12 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 // FITNESS FOR A PARTICULAR PURPOSE.
14 //
15 // See the GNU Lesser General Public License at <<http://www.gnu.org/licenses/lgpl-2.1.html>>
16 // for more details.
17 //
18 // ##################################################################################################
19 #pragma once
20 
21 #include "cafChildFieldHandle.h"
22 #include "cafObjectHandle.h"
23 #include "cafVisitor.h"
24 
25 namespace caffa
26 {
30 template <typename ObjectType = ObjectHandle>
31 class ObjectPerformer : public Editor
32 {
33 public:
34  using Callback = std::function<void( ObjectType* )>;
35  using Selector = std::function<bool( const ObjectType* )>;
36 
37  ObjectPerformer( Callback callback, Selector selector = nullptr )
38  : m_selector( selector )
39  , m_callback( callback )
40  {
41  }
42 
43 private:
44  void visitObject( ObjectHandle* object ) override
45  {
46  auto typedObject = dynamic_cast<ObjectType*>( object );
47  if ( typedObject && ( !m_selector || m_selector( typedObject ) ) )
48  {
49  m_callback( typedObject );
50  }
51  }
52 
53  void visitField( FieldHandle* field ) override {}
54 
55 private:
56  Selector m_selector;
57  Callback m_callback;
58 };
59 } // namespace caffa
Definition: cafObjectPerformer.h:31
Definition: cafVisitor.h:49
Definition: cafObjectHandle.h:47
Base class for all fields, making it possible to handle them generically.
Definition: cafFieldHandle.h:19
Main Caffa namespace.
Definition: cafApplication.h:30