metavis.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "pch.h"
  2. #include "metavis.h"
  3. #include "SettingDialog.h"
  4. #include <QStandardPaths>
  5. #include <QDockwidget>
  6. #include <QLabel>
  7. #include <QLayout>
  8. #include <QDebug>
  9. #include <QStyleFactory>
  10. #include <QtWebChannel/QtWebChannel>
  11. #include <QtWebEngineWidgets/QWebEngineView>
  12. #include <QFileDialog>
  13. #include <QDir>
  14. #include <map>
  15. #include <QDesktopWidget>
  16. metavis::metavis(QWidget* parent)
  17. : QMainWindow(parent), bestGraph(createCustomWidget("Best vs Avg")), particleGraph(createCustomWidget("Particle")), minMaxGraph(createCustomWidget("MinMaxGraph"))
  18. {
  19. ui.setupUi(this);
  20. /* create settings object*/
  21. settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "TK", "metavis", this);
  22. setStyleSheet(styleSheet() + "QMainWindow::separator {background: rgb(200, 200, 200);width: 1px;height: 1px;}");
  23. setStyleSheet(styleSheet() + "QTabBar::tab:selected {color: rgb(0, 122, 204);}");
  24. setStyleSheet(styleSheet() + "QTabWidget::pane {border-top: 2px solid #C2C7CB;}");
  25. readMainWindowSettings();
  26. }
  27. void metavis::openSetting() {
  28. SettingDialog settingDialog(settings, this);
  29. /* Blocking operation */
  30. settingDialog.exec();
  31. }
  32. metavis::~metavis()
  33. {
  34. writeActualMainWindowSettings();
  35. }
  36. GraphView* metavis::createCustomWidget(QString titleString)
  37. {
  38. QDockWidget* dock = new QDockWidget(titleString, this);
  39. dock->setObjectName(titleString);
  40. dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
  41. GraphView* graph = new GraphView(dock, titleString, Bound(10, 20, 40.0, 50.0));
  42. graph->setUseFixedBound(true);
  43. graph->setMinimumSize(200, 200);
  44. graph->setFocusPolicy(Qt::ClickFocus);
  45. graph->show();
  46. graph->repaint();
  47. dock->setWidget(graph);
  48. addDockWidget(Qt::LeftDockWidgetArea, dock);
  49. return graph;
  50. }
  51. void metavis::writeActualMainWindowSettings()
  52. {
  53. settings->beginGroup("MainWindow");
  54. settings->setValue("maximized", isMaximized());
  55. if (!isMaximized()) {
  56. /* position and size of the window if not maximized */
  57. settings->setValue("pos", pos());
  58. settings->setValue("size", size());
  59. settings->setValue("screenCount", QApplication::desktop()->screenCount());
  60. }
  61. settings->endGroup();
  62. }
  63. void metavis::readMainWindowSettings()
  64. {
  65. settings->beginGroup("MainWindow");
  66. if (QApplication::desktop()->screenCount() == settings->value("screenCount", 1)) {
  67. //Only when same screeenCount move the window;
  68. move(settings->value("pos", QPoint(200, 200)).toPoint());
  69. }
  70. resize(settings->value("size", QSize(600, 400)).toSize());
  71. if (settings->value("maximized", false).toBool()) {
  72. showMaximized();
  73. }
  74. settings->endGroup();
  75. }
  76. void metavis::openFile()
  77. {
  78. qDebug() << "openFile";
  79. QString fileName = QFileDialog::getOpenFileName(this, tr("Open LogFile"), QStandardPaths::displayName(QStandardPaths::DesktopLocation), tr("Metavis Logfile (*.metalog)"));
  80. if (fileName == ("")) {
  81. qDebug() << "No file selected";
  82. return;
  83. }
  84. qDebug() << "file:" << fileName;
  85. runVec.push_back(RunData(fileName.toStdString()));
  86. bestGraph->addLine(runVec[0].bestSolutionPerIteration, QColor(255, 0, 0));
  87. bestGraph->addLine(runVec[0].averageSolutionPerItertion, QColor(0, 0, 255));
  88. minMaxGraph->addLine(runVec[0].minSolutionPerItertion, QColor(255, 0, 0));
  89. minMaxGraph->addLine(runVec[0].maxSolutionPerItertion, QColor(0, 0, 255));
  90. minMaxGraph->addDots(runVec[0].dotsForDistribution, QColor(255, 165, 0, 100));
  91. for (auto iter = runVec[0].particleMap.begin(); iter != runVec[0].particleMap.end(); iter++) {
  92. particleGraph->addLine(iter->second);
  93. }
  94. }