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.

ovdCInputDialog.cpp 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "ovdCInputDialog.h"
  2. #include <gdk/gdkkeysyms.h>
  3. namespace OpenViBE {
  4. namespace Designer {
  5. CInputDialog::CInputDialog(const char* gtkBuilder, const fpButtonCB okButtonCB, void* data, const char* title, const char* label, const char* entry)
  6. {
  7. m_okButtonCB = okButtonCB;
  8. m_userData = data;
  9. //retrieve input dialog
  10. GtkBuilder* builder = gtk_builder_new(); // glade_xml_new(gtkBuilder, "input", nullptr);
  11. gtk_builder_add_from_file(builder, gtkBuilder, nullptr);
  12. gtk_builder_connect_signals(builder, nullptr);
  13. m_dialog = GTK_DIALOG(gtk_builder_get_object(builder, "input"));
  14. m_dialogLabel = GTK_LABEL(gtk_builder_get_object(builder, "input-label"));
  15. m_dialogEntry = GTK_ENTRY(gtk_builder_get_object(builder, "input-entry"));
  16. m_dialogOkButton = GTK_BUTTON(gtk_builder_get_object(builder, "input-button_ok"));
  17. m_dialogCancelButton = GTK_BUTTON(gtk_builder_get_object(builder, "input-button_cancel"));
  18. GTK_WIDGET_SET_FLAGS(GTK_WIDGET(m_dialogEntry), GDK_KEY_PRESS_MASK);
  19. g_signal_connect(G_OBJECT(m_dialogEntry), "key-press-event", G_CALLBACK(keyPressEventCB), m_dialog);
  20. if (label != nullptr) { gtk_label_set(m_dialogLabel, label); }
  21. if (entry != nullptr) { gtk_entry_set_text(m_dialogEntry, entry); }
  22. g_signal_connect(G_OBJECT(m_dialogOkButton), "clicked", G_CALLBACK(buttonClickedCB), this);
  23. g_signal_connect(G_OBJECT(m_dialogCancelButton), "clicked", G_CALLBACK(buttonClickedCB), this);
  24. gtk_window_set_position(GTK_WINDOW(m_dialog), GTK_WIN_POS_MOUSE);
  25. gtk_window_set_title(GTK_WINDOW(m_dialog), title);
  26. }
  27. CInputDialog::~CInputDialog() { gtk_widget_destroy(GTK_WIDGET(m_dialog)); }
  28. void CInputDialog::run()
  29. {
  30. const gint res = gtk_dialog_run(m_dialog);
  31. if (res == GTK_RESPONSE_ACCEPT) { if (m_okButtonCB != nullptr) { m_okButtonCB(GTK_WIDGET(m_dialogOkButton), this); } }
  32. gtk_widget_hide_all(GTK_WIDGET(m_dialog));
  33. }
  34. gboolean CInputDialog::keyPressEventCB(GtkWidget* /*widget*/, GdkEventKey* eventKey, gpointer data)
  35. {
  36. if (eventKey->keyval == GDK_Return || eventKey->keyval == GDK_KP_Enter)
  37. {
  38. gtk_dialog_response(GTK_DIALOG(data), GTK_RESPONSE_ACCEPT);
  39. return TRUE;
  40. }
  41. if (eventKey->keyval == GDK_Escape)
  42. {
  43. gtk_dialog_response(GTK_DIALOG(data), GTK_RESPONSE_REJECT);
  44. return TRUE;
  45. }
  46. return FALSE;
  47. }
  48. void CInputDialog::buttonClickedCB(GtkButton* button, gpointer data) { static_cast<CInputDialog*>(data)->buttonClicked(button); }
  49. void CInputDialog::buttonClicked(GtkButton* button) const
  50. {
  51. if (button == m_dialogOkButton) { gtk_dialog_response(m_dialog, GTK_RESPONSE_ACCEPT); }
  52. else { gtk_dialog_response(m_dialog, GTK_RESPONSE_REJECT); }
  53. }
  54. } // namespace Designer
  55. } // namespace OpenViBE