diff --git a/src/gui2/drivecomponent.cc b/src/gui2/drivecomponent.cc index 02848947..c20860a3 100644 --- a/src/gui2/drivecomponent.cc +++ b/src/gui2/drivecomponent.cc @@ -84,6 +84,32 @@ public: if (fc->source) fc->source(fluxFile, globalConfig().overrides()->mutable_flux_source()); + + QString rpmOverride = rpmOverrideComboBox->currentData().toString(); + if (rpmOverride == "300") + globalConfig() + .overrides() + ->mutable_drive() + ->set_rotational_period_ms(200); + else if (rpmOverride == "360") + globalConfig() + .overrides() + ->mutable_drive() + ->set_rotational_period_ms(166); + else if (rpmOverride == "override") + { + float value = rpmOverrideValue->value(); + globalConfig() + .overrides() + ->mutable_drive() + ->set_rotational_period_ms(60e3 / value); + } + + QString driveTypeOverride = + driveTypeOverrideComboBox->currentData().toString(); + if (driveTypeOverride != "default") + globalConfig().overrides()->MergeFrom( + *drivetypes.at(driveTypeOverride.toStdString())); } void loadSavedState() override diff --git a/src/gui2/fluxcomponent.cc b/src/gui2/fluxcomponent.cc index 14b66d7d..bc534e0a 100644 --- a/src/gui2/fluxcomponent.cc +++ b/src/gui2/fluxcomponent.cc @@ -38,11 +38,6 @@ public: _fluxVisualiserWidget->setTrackData(track); } - void setDiskData(std::shared_ptr disk) - { - _fluxVisualiserWidget->setDiskData(disk); - } - private: MainWindow* _mainWindow; FluxVisualiserWidget* _fluxVisualiserWidget; diff --git a/src/gui2/fluxcomponent.h b/src/gui2/fluxcomponent.h index 57ec50b5..f1cedf57 100644 --- a/src/gui2/fluxcomponent.h +++ b/src/gui2/fluxcomponent.h @@ -6,7 +6,6 @@ class FluxComponent { public: virtual void setTrackData(std::shared_ptr track) = 0; - virtual void setDiskData(std::shared_ptr disk) = 0; public: static FluxComponent* create(MainWindow* mainWindow); diff --git a/src/gui2/fluxvisualiserwidget.cc b/src/gui2/fluxvisualiserwidget.cc index e6e9ba0d..70e530c3 100644 --- a/src/gui2/fluxvisualiserwidget.cc +++ b/src/gui2/fluxvisualiserwidget.cc @@ -18,7 +18,6 @@ class DiskFlux; class TrackFlux; static constexpr int SIDES = 2; -static constexpr int TRACKS = 82; static constexpr int SLOTS = 300; static constexpr float VBORDER = 1.0; @@ -67,25 +66,18 @@ public: void setTrackData(std::shared_ptr track) { - key_t key = { - track->trackInfo->physicalTrack, track->trackInfo->physicalSide}; - _tracks[key] = track; - - recompute( - track->trackInfo->physicalSide, track->trackInfo->physicalTrack); - } - - void setDiskData(std::shared_ptr disk) - { - _tracks.clear(); - for (const auto& track : disk->tracks) + for (int i = 0; i < track->trackInfo->groupSize; i++) { - key_t key = {track->trackInfo->physicalTrack, + key_t key = {track->trackInfo->physicalTrack + i, track->trackInfo->physicalSide}; _tracks[key] = track; - } + _numTracks = track->trackInfo->numPhysicalTracks; + _viewData0.resize(_numTracks); + _viewData1.resize(_numTracks); - recompute(); + recompute(track->trackInfo->physicalSide, + track->trackInfo->physicalTrack + i); + } } private: @@ -121,11 +113,18 @@ private: void drawSide(float x, float y, int side) { - float step = (VOUTER_RADIUS - VINNER_RADIUS) / TRACKS; - for (int track = 0; track < 82; track++) + if (_numTracks == 0) + { + _scene->addAlignedText(x, y, "No flux loaded!"); + return; + } + + auto& viewData = side ? _viewData1 : _viewData0; + float step = (VOUTER_RADIUS - VINNER_RADIUS) / _numTracks; + for (int track = 0; track < _numTracks; track++) { QConicalGradient gradient(x, y, 90.0); - gradient.setStops(_viewData[side][track].gradientStops); + gradient.setStops(viewData.at(track).gradientStops); QBrush brush(gradient); QPen pen(brush, step * 1.15); @@ -142,13 +141,14 @@ private: void recompute() { for (int side = 0; side < SIDES; side++) - for (int track = 0; track < TRACKS; track++) + for (int track = 0; track < _numTracks; track++) recompute(side, track); } void recompute(int side, int track) { - VData& vdata = _viewData[side][track]; + auto& viewData = side ? _viewData1 : _viewData0; + VData& vdata = viewData.at(track); QGradientStops& stops = vdata.gradientStops; stops.clear(); ranges::fill(vdata.slot, VSlot()); @@ -250,7 +250,9 @@ private: Scene* _scene; std::map> _tracks; int _viewMode = BOTH_SIDES; - VData _viewData[SIDES][TRACKS]; + unsigned _numTracks = 0; + std::vector _viewData0; + std::vector _viewData1; float _gamma = 1.0; }; diff --git a/src/gui2/fluxvisualiserwidget.h b/src/gui2/fluxvisualiserwidget.h index 1936f669..74447bb9 100644 --- a/src/gui2/fluxvisualiserwidget.h +++ b/src/gui2/fluxvisualiserwidget.h @@ -14,7 +14,6 @@ public: W_SLOT(setGamma) virtual void setTrackData(std::shared_ptr track) = 0; - virtual void setDiskData(std::shared_ptr disk) = 0; public: static FluxVisualiserWidget* create(); diff --git a/src/gui2/imagevisualiserwidget.cc b/src/gui2/imagevisualiserwidget.cc index ee68b97c..569031c5 100644 --- a/src/gui2/imagevisualiserwidget.cc +++ b/src/gui2/imagevisualiserwidget.cc @@ -102,7 +102,7 @@ public: for (auto& sector : track->sectors) _sectors.insert({key, sector}); _trackInfos.insert({key, track->trackInfo}); - _numTracks = track->trackInfo->numTracks; + _numTracks = track->trackInfo->numLogicalTracks; redraw(); } diff --git a/src/gui2/mainwindow.cc b/src/gui2/mainwindow.cc index 0657fe86..dbcc0e84 100644 --- a/src/gui2/mainwindow.cc +++ b/src/gui2/mainwindow.cc @@ -74,7 +74,6 @@ public: /* A complete disk has been read. */ [&](const DiskReadLogMessage& m) { - _fluxComponent->setDiskData(m.disk); _imageComponent->setDiskData(m.disk); _currentDisk = m.disk; },