mainwindow.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. /*
  2. = StarPU-Top for StarPU =
  3. Copyright (C) 2011
  4. William Braik
  5. Yann Courtois
  6. Jean-Marie Couteyen
  7. Anthony Roy
  8. This library is free software; you can redistribute it and/or
  9. modify it under the terms of the GNU Lesser General Public
  10. License as published by the Free Software Foundation; either
  11. version 2.1 of the License, or (at your option) any later version.
  12. This library is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. Lesser General Public License for more details.
  16. You should have received a copy of the GNU Lesser General Public
  17. License along with this library; if not, write to the Free Software
  18. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19. */
  20. #ifndef MAINWINDOW_H
  21. #define MAINWINDOW_H
  22. class GanttWidget;
  23. class PreferencesDialog;
  24. class DebugConsole;
  25. class AbstractWidgetWindow;
  26. class DataWidget;
  27. class DataAggregatorWidget;
  28. class InteractiveWidget;
  29. class CommunicationThread;
  30. class ConfigurationManager;
  31. class WidgetWindowsManager;
  32. class SessionSetupManager;
  33. class TaskManager;
  34. #include <QMainWindow>
  35. #include <QMdiArea>
  36. #include <QSplitter>
  37. #include <QLabel>
  38. #include <QComboBox>
  39. #include <QPointer>
  40. #include <QScrollArea>
  41. #include <QAbstractSocket>
  42. #include <QTime>
  43. #include <QSpinBox>
  44. #include "starpu_top_types.h"
  45. namespace Ui
  46. {
  47. class MainWindow;
  48. }
  49. class MainWindow: public QMainWindow
  50. {
  51. Q_OBJECT
  52. public:
  53. explicit MainWindow(QWidget *parent = 0);
  54. ~MainWindow();
  55. // Getters
  56. // Get GUI components
  57. const QSplitter *splitter() const;
  58. const QDockWidget *parametersDock() const;
  59. // Get managers
  60. const WidgetWindowsManager* widgetWindowsManager() const;
  61. const ConfigurationManager* configurationManager() const;
  62. const SessionSetupManager* sessionSetupManager() const;
  63. const TaskManager* taskManager() const;
  64. // Get different descriptions for the current session
  65. QString serverID() const;
  66. const QList<DataDescription*> *dataDescriptions() const;
  67. const QList<ParamDescription*> *paramDescriptions() const;
  68. DataDescription *dataDescriptionFromId(int dataId);
  69. ParamDescription *paramDescriptionFromId(int interactiveId);
  70. const QList<starpu_top_device> *serverDevices() const;
  71. // Get different widgets metadata
  72. const QHash<DataWidgetType, QString> *dataWidgetNames() const;
  73. const QHash<DataType, QSet<DataWidgetType> >
  74. *dataWidgetPossibilities() const;
  75. const QHash<InteractiveWidgetType, QString> *interactiveWidgetNames() const;
  76. const QHash<ParamType, QSet<InteractiveWidgetType> >
  77. *interactiveWidgetPossibilities() const;
  78. // Get the actual widgets
  79. const QList<QPointer<DataWidget> > *dataWidgets() const;
  80. const QList<QPointer<DataAggregatorWidget> > *dataAggregatorWidgets() const;
  81. const QList<QPointer<InteractiveWidget> > *interactiveWidgets() const;
  82. DataWidget *dataWidgetFromDataId(int id);
  83. InteractiveWidget *interactiveWidgetFromParamId(int id);
  84. // Get widgets counts
  85. int nbDataWidgets() const;
  86. int nbDataAggregatorWidgets() const;
  87. int nbInteractiveWidgets() const;
  88. // Get GUI states
  89. bool isConnected() const;
  90. bool isReady() const;
  91. bool isRunning() const;
  92. bool isDebugEnabled() const;
  93. DisplayMode displayMode() const;
  94. // Get effective session time
  95. int effectiveRunningTime() const;
  96. // Add new widgets to the session
  97. DataWidget *addDataWidget(DataDescription *dataDescription);
  98. DataAggregatorWidget *addDataAggregatorWidget(
  99. QList<int> dataIds = QList<int> ());
  100. InteractiveWidget *addInteractiveWidget(ParamDescription *paramDescription);
  101. protected:
  102. // Events
  103. void changeEvent(QEvent *e);
  104. void closeEvent(QCloseEvent *e);
  105. private:
  106. // GUI components
  107. Ui::MainWindow *ui;
  108. QComboBox *_widgetsDisplayModesList;
  109. QSplitter *_splitter;
  110. QMdiArea *_mdiArea;
  111. GanttWidget *_ganttWidget;
  112. QSpinBox *_ganttTimeView;
  113. QScrollArea *_parametersDockScrollArea;
  114. DebugConsole *_debugConsole;
  115. QLabel *_statusBarIcon;
  116. QLabel *_statusBarLabel;
  117. PreferencesDialog *_preferencesDialog;
  118. QList<QPointer<DataWidget> > *_dataWidgets;
  119. QList<QPointer<DataAggregatorWidget> > *_dataAggregatorWidgets;
  120. QList<QPointer<InteractiveWidget> > *_interactiveWidgets;
  121. // Managers
  122. ConfigurationManager *_configurationManager;
  123. CommunicationThread *_communicationThread; // Will instantiate the communication manager
  124. WidgetWindowsManager *_widgetWindowsManager;
  125. SessionSetupManager *_sessionSetupManager;
  126. TaskManager *_taskManager;
  127. // GUI states
  128. DisplayMode _displayMode;
  129. bool _connected;
  130. bool _ready;
  131. bool _running;
  132. bool _debug;
  133. // GUI actions
  134. QAction *_actionConnect;
  135. QAction *_actionLaunch;
  136. QAction *_actionDebug;
  137. QAction *_actionSaveSessionSetup;
  138. QAction *_actionAddDataWidget;
  139. QAction *_actionAddDataAggregatorWidget;
  140. // Widgets metadata
  141. QHash<DataWidgetType, QString> _dataWidgetNames;
  142. QSet<DataWidgetType> _dataBoolWidgets, _dataIntWidgets, _dataFloatWidgets;
  143. QHash<DataType, QSet<DataWidgetType> > _dataWidgetPossibilities;
  144. QHash<InteractiveWidgetType, QString> _interactiveWidgetNames;
  145. QSet<InteractiveWidgetType> _paramBoolWidgets, _paramIntWidgets,
  146. _paramFloatWidgets, _paramEnumWidgets;
  147. QHash<ParamType, QSet<InteractiveWidgetType> >
  148. _interactiveWidgetPossibilities;
  149. // Session metadata
  150. QString _serverID;
  151. qlonglong _referenceTimestamp;
  152. // Different descriptions
  153. QList<DataDescription*> *_dataDescriptions;
  154. QList<ParamDescription*> *_paramDescriptions;
  155. QList<starpu_top_device> *_serverDevices;
  156. int _nbDataWidgets;
  157. int _nbDataAggregatorWidgets;
  158. int _nbInteractiveWidgets;
  159. // Time references
  160. QTime _preGoTimer;
  161. int _preGoTime;
  162. QTime _runningTime;
  163. QTime _currentLockTime;
  164. int _lockedTime;
  165. // Get the current status bar message
  166. QString statusBarMessage() const;
  167. // Get the current session running time
  168. int runningTime() const;
  169. int currentLockTime() const;
  170. int lockedTime() const;
  171. /** SLOTS **/
  172. private slots:
  173. // Actions on GUI
  174. void on_actionConnect_triggered();
  175. void on_actionLaunch_StarPU_triggered();
  176. void on_actionSaveSessionSetup_triggered();
  177. void on_actionDebug_triggered(bool enabled);
  178. void on_actionQuit_triggered();
  179. void on_actionPreferences_triggered();
  180. void on_actionAbout_triggered();
  181. void on_actionAddDataAggregatorWidget_triggered();
  182. // Setters
  183. // Set GUI states
  184. void setConnected(bool connected);
  185. void setReady(bool ready);
  186. void setRunning(bool running);
  187. void setDebug(bool enabled);
  188. void setDisplayMode(DisplayMode displayMode);
  189. // Other methods
  190. void initDataWidgetLists();
  191. void initInteractiveWidgetLists();
  192. void displayInteractiveWidget(InteractiveWidget *interactiveWidget);
  193. void removeDestroyedDataWidgets();
  194. void removeDestroyedInteractiveWidgets();
  195. void removeDestroyedDataAggregatorWidgets();
  196. void clearDescriptions();
  197. void clearDataDescriptions();
  198. void clearParamDescriptions();
  199. void clearWidgets();
  200. void clearDataWidgets();
  201. void clearInteractiveWidgets();
  202. void openSession();
  203. void closeSession();
  204. void setStatusBarIcon(QString iconFile);
  205. void setStatusBarMessage(QString message);
  206. void debugLock();
  207. void debugStep();
  208. void sessionMainWindowSetupLoaded(MainWindowSetup mainWindowSetup);
  209. void sessionParametersDockSetupLoaded(
  210. ParametersDockSetup parametersDockSetup);
  211. void sessionWidgetWindowsSetupLoaded(
  212. QList<DataWidgetSetup> dataWidgetsSetup,
  213. QList<DataAggregatorWidgetSetup> dataAggregatorWidgetsSetup);
  214. public slots:
  215. void synchronizeSessionTime(qlonglong serverTimestamp);
  216. void initClient(QString serverID,
  217. QList<DataDescription*> *dataDescriptions,
  218. QList<ParamDescription*> *paramDescriptions,
  219. QList<starpu_top_device> *serverDevices);
  220. // Connection events handlers
  221. void connectionSucceeded();
  222. void connectionAborted(QString message);
  223. void disconnected();
  224. // GUI updates
  225. void updateDataWidgetsDisplayMode(int index);
  226. void updateDisplayModeIndex(int index);
  227. void updateDataWidgetType(int dataId, DataWidgetType newWidget);
  228. void updateInteractiveWidgetType(int paramId,
  229. InteractiveWidgetType newWidget);
  230. void updateStatusBarMessage(QString message);
  231. // Responses to protocol messages
  232. void protocolErrorCaught(QString errorMessage);
  233. // Debug
  234. void setDebugMessage(QString debugMessage);
  235. void setDebugLock(QString debugLockMessage);
  236. // Incoming widget update messages
  237. void updateDataWidget(int dataWidgetId, bool value, qlonglong timestamp);
  238. void updateDataWidget(int dataWidgetId, int value, qlonglong timestamp);
  239. void updateDataWidget(int dataWidgetId, double value, qlonglong timestamp);
  240. void updateInteractiveWidget(int interactiveWidgetId, bool value,
  241. qlonglong timestamp);
  242. void updateInteractiveWidget(int interactiveWidgetId, int value,
  243. qlonglong timestamp);
  244. void updateInteractiveWidget(int interactiveWidgetId, double value,
  245. qlonglong timestamp);
  246. // Incoming task update messages
  247. void updateTaskPrev(int taskId, int deviceId, qlonglong timestamp,
  248. qlonglong timestampStart, qlonglong timestampEnd);
  249. void updateTaskStart(int taskId, int deviceId, qlonglong timestamp);
  250. void updateTaskEnd(int taskId, qlonglong timestamp);
  251. // Outgoing widget update messages
  252. void interactiveWidgetUpdated(int interactiveWidgetId, bool value);
  253. void interactiveWidgetUpdated(int interactiveWidgetId, int value);
  254. void interactiveWidgetUpdated(int interactiveWidgetId, double value);
  255. /** SIGNALS **/
  256. signals:
  257. void preferencesDialogCreated(int);
  258. void sessionOpened();
  259. void sessionClosed();
  260. void clientLaunched();
  261. void dataEnabled(int dataId);
  262. void dataDisabled(int dataId);
  263. void paramValueUpdated(int paramId, bool paramValue);
  264. void paramValueUpdated(int paramId, int paramValue);
  265. void paramValueUpdated(int paramId, double paramValue);
  266. void debugEnabled(bool enabled);
  267. void debugStepped();
  268. void debugLocked();
  269. };
  270. #endif // MAINWINDOW_H