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.

ovdCDesignerVisualization.h 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #pragma once
  2. #include <string>
  3. #include <vector>
  4. #include <gtk/gtk.h>
  5. #include <visualization-toolkit/ovvizIVisualizationTree.h>
  6. namespace OpenViBE {
  7. namespace Designer {
  8. typedef void (*visualization_delete_event_cb_t)(gpointer data);
  9. class CInterfacedScenario;
  10. class CDesignerVisualization final : public VisualizationToolkit::ITreeViewCB
  11. {
  12. public:
  13. CDesignerVisualization(const Kernel::IKernelContext& ctx, VisualizationToolkit::IVisualizationTree& tree, CInterfacedScenario& scenario)
  14. : m_kernelCtx(ctx), m_tree(tree), m_scenario(scenario) { }
  15. ~CDesignerVisualization() override;
  16. void init(const std::string& guiFile);
  17. void load();
  18. void show() const;
  19. void hide();
  20. void setDeleteEventCB(visualization_delete_event_cb_t cb, gpointer data);
  21. void onVisualizationBoxAdded(const Kernel::IBox* box);
  22. void onVisualizationBoxRemoved(const CIdentifier& boxID);
  23. void onVisualizationBoxRenamed(const CIdentifier& boxID);
  24. //ITreeViewCB callbacks overloading
  25. void createTreeWidget(VisualizationToolkit::IVisualizationWidget* widget) override;
  26. GtkWidget* loadTreeWidget(VisualizationToolkit::IVisualizationWidget* widget) override;
  27. void endLoadTreeWidget(VisualizationToolkit::IVisualizationWidget* widget) override;
  28. GtkWidget* getTreeWidget(GtkWidget* widget) override;
  29. GtkWidget* getVisualizationWidget(GtkWidget* widget) override;
  30. const char* getTreeWidgetIcon(VisualizationToolkit::EVisualizationTreeNode type) override;
  31. //callbacks for dialog
  32. #ifdef HANDLE_MIN_MAX_EVENTS
  33. static gboolean window_state_event_cb(GtkWidget* widget, GdkEventWindowState* event, gpointer data);
  34. #endif
  35. static gboolean configureEventCB(GtkWidget* widget, GdkEventConfigure* event, gpointer data);
  36. static gboolean widgetExposeEventCB(GtkWidget* widget, GdkEventExpose* event, gpointer data);
  37. void resizeCB(VisualizationToolkit::IVisualizationWidget* widget);
  38. static void notebookPageSwitchCB(GtkNotebook* notebook, GtkNotebookPage* page, guint pagenum, gpointer data);
  39. //callback for paned handle position changes
  40. static gboolean notifyPositionPanedCB(GtkWidget* widget, GParamSpec* spec, gpointer data);
  41. static void askNewVisualizationWindowCB(gpointer data, guint action, GtkWidget* widget);
  42. static void newVisualizationWindowCB(GtkWidget* widget, gpointer data);
  43. static void askRenameVisualizationWindowCB(gpointer data, guint action, GtkWidget* widget);
  44. static void renameVisualizationWindowCB(GtkWidget* widget, gpointer data);
  45. static void removeVisualizationWindowCB(gpointer data, guint action, GtkWidget* widget);
  46. static void askNewVisualizationPanelCB(gpointer data, guint action, GtkWidget* widget);
  47. static void newVisualizationPanelCB(GtkWidget* widget, gpointer data);
  48. static void askRenameVisualizationPanelCB(gpointer data, guint action, GtkWidget* widget);
  49. static void renameVisualizationPanelCB(GtkWidget* widget, gpointer data);
  50. static void removeVisualizationPanelCB(gpointer data, guint action, GtkWidget* widget);
  51. static void removeVisualizationWidgetCB(gpointer data, guint action, GtkWidget* widget);
  52. private:
  53. static gboolean deleteEventCB(GtkWidget* widget, GdkEvent* event, gpointer data);
  54. bool deleteEvent() const;
  55. void refreshActiveVisualization(GtkTreePath* selectedItemPath);
  56. void setActiveVisualization(const char* activeWindow, const char* activePanel);
  57. GtkTable* newWidgetsTable();
  58. void setupNewEventBoxTable(GtkBuilder* xml);
  59. //visualization windows
  60. void askNewVisualizationWindow();
  61. public:
  62. bool newVisualizationWindow(const char* label);
  63. private:
  64. void askRenameVisualizationWindow();
  65. bool renameVisualizationWindow(const char* label);
  66. bool removeVisualizationWindow();
  67. //visualization panels
  68. void askNewVisualizationPanel();
  69. bool newVisualizationPanel(const char* label);
  70. void askRenameVisualizationPanel();
  71. bool renameVisualizationPanel(const char* label);
  72. bool removeVisualizationPanel();
  73. //visualization widgets
  74. bool removeVisualizationWidget();
  75. bool removeVisualizationWidget(const CIdentifier& identifier);
  76. bool destroyVisualizationWidget(const CIdentifier& identifier);
  77. void enableNotebookSignals(GtkWidget* notebook, bool b);
  78. void notebookPageSelectedCB(GtkNotebook* notebook, guint pagenum);
  79. void enablePanedSignals(GtkWidget* paned, bool b);
  80. void notifyPositionPaned(GtkWidget* widget);
  81. //Mouse/Key event callbacks
  82. static void widgetKeyPressEventCB(GtkWidget* widget, GdkEventKey* event, gpointer data);
  83. static gboolean widgetEnterNotifyEventCB(GtkWidget* widget, GdkEventCrossing* event, gpointer data);
  84. static gboolean widgetLeaveNotifyEventCB(GtkWidget* widget, GdkEventCrossing* event, gpointer data);
  85. //Mouse/Key event methods
  86. void widgetKeyPressEvent(GtkWidget* widget, GdkEventKey* event);
  87. void widgetEnterNotifyEvent(GtkWidget* widget, GdkEventCrossing* event);
  88. void widgetLeaveNotifyEvent(GtkWidget* widget, GdkEventCrossing* event);
  89. //Tree management callbacks
  90. static gboolean buttonReleaseCB(GtkWidget* widget, GdkEventButton* event, gpointer data);
  91. static void cursorChangedCB(GtkTreeView* treeView, gpointer data);
  92. //Tree management methods
  93. void buttonRelease(GtkWidget* widget, GdkEventButton* event) const;
  94. void cursorChanged(GtkTreeView* treeView);
  95. //Drag methods
  96. static void dragDataGetFromTreeCB(GtkWidget* srcWidget, GdkDragContext* dc, GtkSelectionData* selection, guint info, guint time, gpointer data);
  97. static void dragDataGetFromWidgetCB(GtkWidget* srcWidget, GdkDragContext* dc, GtkSelectionData* selection, guint info, guint time, gpointer data);
  98. //Drop methods
  99. static void dragDataReceivedInWidgetCB(GtkWidget* dstWidget, GdkDragContext*, gint, gint, GtkSelectionData* selection, guint info, guint time,
  100. gpointer data);
  101. static void dataReceivedInEventBoxCB(GtkWidget* dstWidget, GdkDragContext* dc, gint x, gint y, GtkSelectionData* selection, guint info, guint time,
  102. gpointer data);
  103. void dragDataReceivedInWidget(GtkWidget* dstWidget, GtkSelectionData* selection);
  104. void dragDataReceivedInEventBox(GtkWidget* dstWidget, GtkSelectionData* selection, VisualizationToolkit::EDragLocation location);
  105. const Kernel::IKernelContext& m_kernelCtx;
  106. VisualizationToolkit::IVisualizationTree& m_tree;
  107. CInterfacedScenario& m_scenario;
  108. visualization_delete_event_cb_t m_deleteEventCB = nullptr;
  109. gpointer m_deleteEventUserData = nullptr;
  110. std::string m_guiFile;
  111. GtkTreeView* m_treeView = nullptr;
  112. GtkWidget* m_dialog = nullptr;
  113. GtkWidget* m_pane = nullptr;
  114. //highlighted widget
  115. GtkWidget* m_highlightedWidget = nullptr;
  116. //active items
  117. CString m_activeVisualizationWindowName, m_activeVisualizationPanelName;
  118. CIdentifier m_activeVisualizationBoxID = CIdentifier::undefined();
  119. //preview window visibility flag
  120. bool m_previewWindowVisible = false;
  121. size_t m_previewWindowW = 0;
  122. size_t m_previewWindowH = 0;
  123. //Factories
  124. GtkItemFactory* m_unaffectedItemFactory = nullptr;
  125. GtkItemFactory* m_visualizationWindowItemFactory = nullptr;
  126. GtkItemFactory* m_visualizationPanelItemFactory = nullptr;
  127. GtkItemFactory* m_visualizationBoxItemFactory = nullptr;
  128. GtkItemFactory* m_undefinedItemFactory = nullptr;
  129. GtkItemFactory* m_splitItemFactory = nullptr;
  130. std::string m_topEventBoxData;
  131. std::string m_leftEventBoxData;
  132. std::string m_rightEventBoxData;
  133. std::string m_bottomEventBoxData;
  134. };
  135. } // namespace Designer
  136. } // namespace OpenViBE