custom_widgets.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * custom_widgets.h - widgets for value editing
  3. * Copyright (C) 2017 caryoscelus
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #ifndef __STUDIO__CUSTOM_WIDGET_H__29DB1902
  19. #define __STUDIO__CUSTOM_WIDGET_H__29DB1902
  20. #include <typeindex>
  21. #include <QWidget>
  22. namespace studio {
  23. class CustomWidgetFactory {
  24. public:
  25. virtual QWidget* operator()() const = 0;
  26. };
  27. QWidget* new_custom_widget(std::type_index type);
  28. }
  29. #define REGISTER_CUSTOM_WIDGET(Name, Type, Widget) \
  30. class Name##Factory : \
  31. public CustomWidgetFactory, \
  32. class_init::Registered<Name##Factory, Type, CustomWidgetFactory> \
  33. { \
  34. public: \
  35. virtual QWidget* operator()() const override { \
  36. return new Widget(); \
  37. } \
  38. }
  39. #endif