gui architecture for scientifjc workfmow
play

GUI architecture for scientifjc workfmow spaghetti-free, - PowerPoint PPT Presentation

GUI architecture for scientifjc workfmow spaghetti-free, lazy-responsive, with capture & replay Joachim Wuttke Forschungszentrum Jlich GmbH, JCNS-MLZ Garching Google image search for model view 1


  1. GUI architecture for scientifjc workfmow spaghetti-free, lazy-responsive, with capture & replay Joachim Wuttke Forschungszentrum Jülich GmbH, JCNS-MLZ Garching

  2. Google image search for “model view” 1

  3. https://blogs.msdn.microsoft.com/erwinvandervalk 2

  4. Qt5 model/view classes view is based on QAbstractItemView - QListView - QTableView - QTreeView model inherits from QAbstractItemModel - QAbstractListModel - QAbstractProxyModel - QAbstractTableModel 3

  5. by Juanpe Bolivar (CppCon 2017) 4

  6. by Juanpe Bolivar (CppCon 2017) 5

  7. by Juanpe Bolivar (CppCon 2017) 6

  8. by Juanpe Bolivar (CppCon 2017) 7

  9. 8 VIEW VIEW VIEWMODEL VIEWMODEL DATA

  10. 9 VIEW VIEW VIEWMODEL VIEWMODEL gui DATA core

  11. 10 VIEW VIEW VIEWMODEL VIEWMODEL gui DATA core LOGGER PARAMETER WRAPPERS services

  12. 11 VIEW user script VIEWMODEL gui Python API DATA core LOGGER PARAMETER WRAPPERS services

  13. generated by Doxygen 12

  14. generated by Doxygen 13

  15. generated by Doxygen 14

  16. 15 GUI: Core: qApp gSession gMainWindow settings settings data widgets menu raw reduced metadata parameters triggers, toggles images results = global variable

  17. • prefer plain global variables over equivalent singletons • prefer one global variable gSession over function calls like f(session.Data, session.Parameters); which calls g(datafiles[iFile], parameterX , parameterZ); which calls h(datafile.metadata.A, parameterZ); 16

  18. How to keep this up to date? 17

  19. • to restrict GUI redrawing to Widgets that have changed. • to restrict Core recomputation to data that have changed, Both are premature optimizations. 18 Signalling spaghetti (GUI ↔ Core) has its root in efgorts

  20. • to restrict Core recomputation to data that have changed, • to restrict GUI redrawing to Widgets that have changed. Both are premature optimizations. They do not even preclude duplication of Core computations. 18 Signalling spaghetti (GUI ↔ Core) has its root in efgorts

  21. 19 application view 1 view 2 data 1 data 2 data 3 data 4 parameter

  22. 20 application view 1 view 2 data 1 data 2 data 3 data 4 parameter

  23. 21 application view 1 view 2 data 1 data 2 data 3 data 4 declare invalid request refresh parameter lazy evaluate

  24. 22 GUI: Core: qApp gSession gMainWindow settings settings data widgets menu raw reduced metadata parameters triggers, toggles images results request redisplay request recompute

  25. Bonus section: capture & replay

  26. Logging Why? • to debug, • to profjle, • to document provenance, and to replay • tests during development, • functional tests, • user sessions, especially upon bug reports. Also related: • Undo/Redo. 23

  27. Logging How? By recording • keyboard and mouse events, • interrupts, • user actions at widget level, • GUI-to-core calls. 24

  28. Logging How? By recording • interrupts, • user actions at widget level, 24 • keyboard and mouse events, • GUI-to-core calls.

  29. 25 user tester GUI textual action command control command test case test case test case widgets interpreter test case test case test case undo/redo core command stack application test suite log file text editor

  30. 26 jugit.fz-juelich.de:mlz/libQCR QcrMixin QAction QcrTrigger QcrToggle QcrControl<bool> QCheckButton QcrCheckButton QSpinBox QcrSpinBox QcrControl<int> QComboBox QcrComboBox QTabWidget QcrTabWidget QDoubleSpinBox QcrDoubleSpinBox QcrControl<double> QLineEdit QcrLineEdit QcrControl<QString> QDialog QcrModelessDialog QcrModalDialog QcrModal QFileDialog QcrFileDialog

Recommend


More recommend