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.

ovdCBooleanSettingView.cpp 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "ovdCBooleanSettingView.h"
  2. #include "../ovd_base.h"
  3. namespace OpenViBE {
  4. namespace Designer {
  5. namespace Setting {
  6. static void OnCheckbuttonSettingBooleanPressed(GtkToggleButton* /*button*/, gpointer data) { static_cast<CBooleanSettingView*>(data)->toggleButtonClick(); }
  7. static void OnInsertion(GtkEntry* /*entry*/, gpointer data) { static_cast<CBooleanSettingView*>(data)->onChange(); }
  8. CBooleanSettingView::CBooleanSettingView(Kernel::IBox& box, const size_t index, CString& builderName)
  9. : CAbstractSettingView(box, index, builderName, "settings_collection-hbox_setting_boolean")
  10. {
  11. GtkWidget* settingWidget = CAbstractSettingView::getEntryFieldWidget();
  12. std::vector<GtkWidget*> widgets;
  13. CAbstractSettingView::extractWidget(settingWidget, widgets);
  14. m_toggle = GTK_TOGGLE_BUTTON(widgets[1]);
  15. m_entry = GTK_ENTRY(widgets[0]);
  16. g_signal_connect(G_OBJECT(m_entry), "changed", G_CALLBACK(OnInsertion), this);
  17. g_signal_connect(G_OBJECT(m_toggle), "toggled", G_CALLBACK(OnCheckbuttonSettingBooleanPressed), this);
  18. CAbstractSettingView::initializeValue();
  19. }
  20. void CBooleanSettingView::getValue(CString& value) const { value = CString(gtk_entry_get_text(m_entry)); }
  21. void CBooleanSettingView::setValue(const CString& value)
  22. {
  23. m_onValueSetting = true;
  24. if (value == CString("true"))
  25. {
  26. gtk_toggle_button_set_active(m_toggle, true);
  27. gtk_toggle_button_set_inconsistent(m_toggle, false);
  28. }
  29. else if (value == CString("false"))
  30. {
  31. gtk_toggle_button_set_active(m_toggle, false);
  32. gtk_toggle_button_set_inconsistent(m_toggle, false);
  33. }
  34. else { gtk_toggle_button_set_inconsistent(m_toggle, true); }
  35. gtk_entry_set_text(m_entry, value);
  36. m_onValueSetting = false;
  37. }
  38. void CBooleanSettingView::toggleButtonClick()
  39. {
  40. if (!m_onValueSetting)
  41. {
  42. if (gtk_toggle_button_get_active(m_toggle))
  43. {
  44. getBox().setSettingValue(getSettingIndex(), "true");
  45. setValue("true");
  46. }
  47. else
  48. {
  49. getBox().setSettingValue(getSettingIndex(), "false");
  50. setValue("false");
  51. }
  52. }
  53. }
  54. void CBooleanSettingView::onChange()
  55. {
  56. if (!m_onValueSetting)
  57. {
  58. const gchar* value = gtk_entry_get_text(m_entry);
  59. getBox().setSettingValue(getSettingIndex(), value);
  60. }
  61. }
  62. } // namespace Setting
  63. } // namespace Designer
  64. } // namespace OpenViBE