BitfieldControlPanel.cpp 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "pch.h"
  2. #include "BitfieldControlPanel.h"
  3. #include <QSettings>
  4. BitfieldControlPanel::BitfieldControlPanel(QWidget *parent)
  5. : QWidget(parent)
  6. {
  7. QVBoxLayout* layout = new QVBoxLayout(this);
  8. layout->setContentsMargins(0, 0, 0, 0);
  9. layout->addWidget(field);
  10. field->setAxisLegend("Position", "#SetBits");
  11. showOptionsButton = new QPushButton("Hide Options");
  12. layout->addWidget(showOptionsButton);
  13. connect(showOptionsButton, &QPushButton::pressed, this, &BitfieldControlPanel::toggleOptions);
  14. layout->addWidget(slider);
  15. slider->setTitle("Iteration:");
  16. //Connect slider with field
  17. connect(slider, &RangeSlider::maxChanged, field, &Bitfield::setMaximumIterationToDispaly);
  18. connect(slider, &RangeSlider::minChanged, field, &Bitfield::setMinimumIterationToDispaly);
  19. connect(gradient, &ColorGradient::gradientChanged, this, &BitfieldControlPanel::updateDotColorsFromDisplayedRun);
  20. layout->addWidget(gradient);
  21. field->frameGraphInView();
  22. //Settings
  23. QSettings settings("settings.ini", QSettings::IniFormat, this);
  24. settings.beginGroup("BitField");
  25. if (settings.value("hideOptions", true).toBool()) {
  26. toggleOptions();
  27. }
  28. settings.endGroup();
  29. }
  30. BitfieldControlPanel::~BitfieldControlPanel()
  31. {
  32. //Settings
  33. QSettings settings("settings.ini", QSettings::IniFormat, this);
  34. settings.beginGroup("BitField");
  35. settings.setValue("hideOptions",this->isOptionHidden);
  36. settings.endGroup();
  37. }
  38. void BitfieldControlPanel::updateDotColorsFromDisplayedRun()
  39. {
  40. if (!displayedRun || displayedRun->dotsForBitField.empty() || !displayedRun->dotsForBitField.back().existLink()) {
  41. return;
  42. }
  43. for (GraphDataPoint& dot : displayedRun->dotsForBitField) {
  44. dot.color = gradient->getColorFromValue(dot.orginalPoint->objectiveFunction);
  45. }
  46. field->update();
  47. }
  48. void BitfieldControlPanel::displaySingleRun(SingleRun* run)
  49. {
  50. displayedRun = run;
  51. updateDotColorsFromDisplayedRun();
  52. field->removeAll();
  53. field->addSeries(&run->dotsForBitField, run->name, "", QColor(Qt::black), GraphPlottSeries::SeriesType::Dot);
  54. if (!run->dotsForBitField.empty() && run->dotsForBitField.back().existLink()) {
  55. field->maxAmountOfSetBits = run->dotsForBitField.back().orginalPoint->bitVec.size();
  56. if (run->dotsForBitField.front().orginalPoint->iteration < slider->getMinRange()) {
  57. slider->setMinRange(run->dotsForBitField.front().orginalPoint->iteration);
  58. }
  59. if (run->dotsForBitField.back().orginalPoint->iteration > slider->getMaxRange()) {
  60. slider->setMaxRange(run->dotsForBitField.back().orginalPoint->iteration);
  61. }
  62. }
  63. field->frameGraphInView();
  64. }
  65. void BitfieldControlPanel::clearRun()
  66. {
  67. displayedRun = nullptr;
  68. field->removeAll();
  69. }
  70. void BitfieldControlPanel::toggleOptions()
  71. {
  72. this->isOptionHidden = !this->isOptionHidden;
  73. showOptionsButton->setText(this->isOptionHidden ? "More Options" : "Hide Options");
  74. this->slider->setHidden(this->isOptionHidden);
  75. this->gradient->setHidden(this->isOptionHidden);
  76. }