WidgetRegister.cpp
Go to the documentation of this file.
1 #include "WidgetRegister.h"
2 
3 #include <map>
4 #include <memory>
5 #include <typeindex>
6 
7 // DO NOT REMOVE. NEEDS TO BE INCLUDED BEFORE ExpressionException.h for `LocalException() << ` construct below.
9 
12 
13 #include "Widgets.h"
14 
15 namespace armarx::RemoteGui
16 {
17 
18  typedef std::map<std::type_index, WidgetHandler*> WidgetRegister;
19 
20  template <typename HandlerT>
21  void
23  {
25  static WidgetHandler handler;
26  register_.emplace(typeid(typename WidgetHandler::RemoteWidgetT), &handler);
27  }
28 
31  {
32  WidgetRegister result;
33 
34  registerHandler<CheckBoxHandler>(result);
35  registerHandler<ToggleButtonHandler>(result);
36  registerHandler<ButtonHandler>(result);
37 
38  registerHandler<IntSpinBoxHandler>(result);
39  registerHandler<IntSliderHandler>(result);
40  registerHandler<FloatSpinBoxHandler>(result);
41  registerHandler<FloatSliderHandler>(result);
42 
43  registerHandler<LabelHandler>(result);
44  registerHandler<LineEditHandler>(result);
45  registerHandler<ComboBoxHandler>(result);
46 
47  registerHandler<GroupBoxHandler>(result);
48  registerHandler<VBoxLayoutHandler>(result);
49  registerHandler<HBoxLayoutHandler>(result);
50  registerHandler<SimpleGridLayoutSpanningChildHandler>(result);
51  registerHandler<SimpleGridLayoutHandler>(result);
52  registerHandler<GridLayoutHandler>(result);
53 
54  registerHandler<HSpacerHandler>(result);
55  registerHandler<VSpacerHandler>(result);
56  registerHandler<HLineHandler>(result);
57  registerHandler<VLineHandler>(result);
58  registerHandler<EmptyWidgetHandler>(result);
59 
60  registerHandler<Vector3fSpinBoxesHandler>(result);
61  registerHandler<PosRPYSpinBoxesHandler>(result);
62  return result;
63  }
64 
65  const WidgetHandler&
67  {
69  static const WidgetRegister widgetRegister = createWidgetRegister();
70 
71  auto descPtr = desc.get();
72  ARMARX_CHECK_EXPRESSION(descPtr != nullptr);
73 
74  std::type_info const& typeInfo = typeid(*descPtr);
75 
76  auto iter = widgetRegister.find(typeInfo);
77  if (iter == widgetRegister.end())
78  {
79  throw armarx::LocalException()
80  << "Unexpected widget type: " << GetTypeString(typeInfo)
81  << "\n only these types are supported:" << ARMARX_STREAM_PRINTER
82  {
83  for (const auto& [tid, _] : widgetRegister)
84  {
85  out << "\n " << GetTypeString(tid);
86  }
87  };
88  }
89 
90  auto& widgetHandler = iter->second;
91  ARMARX_CHECK_EXPRESSION(widgetHandler);
92 
93  return *widgetHandler;
94  }
95 
96 } // namespace armarx::RemoteGui
armarx::RemoteGui::TypedWidgetHandler
Definition: TypedWidget.h:19
armarx::RemoteGui::WidgetRegister
std::map< std::type_index, WidgetHandler * > WidgetRegister
Definition: WidgetRegister.cpp:18
GetTypeString.h
armarx::RemoteGui
Definition: LightweightRemoteGuiComponentPlugin.h:30
Widgets.h
ARMARX_TRACE
#define ARMARX_TRACE
Definition: trace.h:77
WidgetRegister.h
armarx::RemoteGui::WidgetHandler
Definition: WidgetHandler.h:22
armarx::RemoteGui::registerHandler
void registerHandler(WidgetRegister &register_)
Definition: WidgetRegister.cpp:22
armarx::GetTypeString
std::string GetTypeString(const std::type_info &tinf, bool withoutNamespaceSpecifier=false)
Definition: GetTypeString.h:38
LoggingUtil.h
armarx::WidgetDescription::WidgetPtr
::IceInternal::Handle<::armarx::WidgetDescription::Widget > WidgetPtr
Definition: NJointControllerBase.h:67
ExpressionException.h
ARMARX_CHECK_EXPRESSION
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
Definition: ExpressionException.h:73
armarx::RemoteGui::getWidgetHandler
const WidgetHandler & getWidgetHandler(WidgetPtr const &desc)
Definition: WidgetRegister.cpp:66
armarx::RemoteGui::createWidgetRegister
WidgetRegister createWidgetRegister()
Definition: WidgetRegister.cpp:30
ARMARX_STREAM_PRINTER
#define ARMARX_STREAM_PRINTER
use this macro to write output code that is executed when printed and thus not executed if the debug ...
Definition: Logging.h:310