You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ovdCAbstractSettingView.cpp 3.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "ovdCAbstractSettingView.h"
  2. namespace OpenViBE {
  3. namespace Designer {
  4. namespace Setting {
  5. static void CollectWidgetCB(GtkWidget* widget, gpointer data) { static_cast<std::vector<GtkWidget*>*>(data)->push_back(widget); }
  6. CAbstractSettingView::~CAbstractSettingView()
  7. {
  8. if (GTK_IS_WIDGET(m_nameWidget)) { gtk_widget_destroy(m_nameWidget); }
  9. if (GTK_IS_WIDGET(m_entryNameWidget)) { gtk_widget_destroy(m_entryNameWidget); }
  10. if (G_IS_OBJECT(m_builder)) { g_object_unref(m_builder); }
  11. }
  12. CAbstractSettingView::CAbstractSettingView(Kernel::IBox& box, const size_t index, const char* builderName, const char* widgetName)
  13. : m_box(box), m_index(index), m_settingWidgetName("")
  14. {
  15. if (builderName != nullptr)
  16. {
  17. m_builder = gtk_builder_new();
  18. gtk_builder_add_from_file(m_builder, builderName, nullptr);
  19. gtk_builder_connect_signals(m_builder, nullptr);
  20. if (widgetName != nullptr)
  21. {
  22. m_settingWidgetName = widgetName;
  23. CAbstractSettingView::generateNameWidget();
  24. m_entryFieldWidget = CAbstractSettingView::generateEntryWidget();
  25. }
  26. }
  27. }
  28. void CAbstractSettingView::setNameWidget(GtkWidget* widget)
  29. {
  30. if (m_nameWidget) { gtk_widget_destroy(m_nameWidget); }
  31. m_nameWidget = widget;
  32. }
  33. void CAbstractSettingView::setEntryWidget(GtkWidget* widget)
  34. {
  35. if (m_entryNameWidget) { gtk_widget_destroy(m_entryNameWidget); }
  36. m_entryNameWidget = widget;
  37. }
  38. void CAbstractSettingView::generateNameWidget()
  39. {
  40. GtkWidget* settingName = GTK_WIDGET(gtk_builder_get_object(m_builder, "settings_collection-label_setting_name"));
  41. gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(settingName)), settingName);
  42. setNameWidget(settingName);
  43. CString name;
  44. getBox().getSettingName(m_index, name);
  45. gtk_label_set_text(GTK_LABEL(settingName), name);
  46. }
  47. GtkWidget* CAbstractSettingView::generateEntryWidget()
  48. {
  49. GtkTable* table = GTK_TABLE(gtk_table_new(1, 3, false));
  50. GtkWidget* settingWidget = GTK_WIDGET(gtk_builder_get_object(m_builder, m_settingWidgetName.toASCIIString()));
  51. GtkWidget* settingRevert = GTK_WIDGET(gtk_builder_get_object(m_builder, "settings_collection-button_setting_revert"));
  52. GtkWidget* settingDefault = GTK_WIDGET(gtk_builder_get_object(m_builder, "settings_collection-button_setting_default"));
  53. gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(settingWidget)), settingWidget);
  54. gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(settingRevert)), settingRevert);
  55. gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(settingDefault)), settingDefault);
  56. gtk_table_attach(table, settingWidget, 0, 1, 0, 1, GtkAttachOptions(GTK_FILL | GTK_EXPAND), GtkAttachOptions(GTK_FILL | GTK_EXPAND), 0, 0);
  57. //gtk_table_attach(m_table, settingDefault, 1, 2, 0, 1, GtkAttachOptions(GTK_SHRINK), GtkAttachOptions(GTK_SHRINK), 0, 0);
  58. //gtk_table_attach(m_table, settingRevert, 2, 3, 0, 1, GtkAttachOptions(GTK_SHRINK), GtkAttachOptions(GTK_SHRINK), 0, 0);
  59. setEntryWidget(GTK_WIDGET(table));
  60. gtk_widget_set_visible(getEntryWidget(), true);
  61. //If we don't increase the ref counter it will cause trouble when we gonna move it later
  62. g_object_ref(G_OBJECT(table));
  63. return settingWidget;
  64. }
  65. void CAbstractSettingView::initializeValue()
  66. {
  67. CString value;
  68. getBox().getSettingValue(m_index, value);
  69. setValue(value);
  70. }
  71. void CAbstractSettingView::extractWidget(GtkWidget* widget, std::vector<GtkWidget*>& widgets)
  72. {
  73. gtk_container_foreach(GTK_CONTAINER(widget), CollectWidgetCB, &widgets);
  74. }
  75. } // namespace Setting
  76. } // namespace Designer
  77. } // namespace OpenViBE