From 09efaeeb29dfacc78362f456b81204755a618c8c Mon Sep 17 00:00:00 2001 From: Toni Riikonen Date: Wed, 26 Nov 2025 23:08:47 +0200 Subject: [PATCH] FDD audio selection to None + disabled if drive not selected. Load audio profiles on audio settings change to take immediate action when VM already running. --- src/floppy/fdd_audio.c | 2 +- src/include/86box/fdd_audio.h | 1 + src/qt/qt_settingsfloppycdrom.cpp | 21 ++++++++++++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/floppy/fdd_audio.c b/src/floppy/fdd_audio.c index 1e2237026..fe56356d4 100644 --- a/src/floppy/fdd_audio.c +++ b/src/floppy/fdd_audio.c @@ -302,7 +302,7 @@ fdd_audio_load_profiles(void) fdd_log("FDD Audio: Loaded %d audio profiles from %s\n", audio_profile_count, config_path); } -static void +void load_profile_samples(int profile_id) { if (profile_id <= 0 || profile_id >= audio_profile_count) diff --git a/src/include/86box/fdd_audio.h b/src/include/86box/fdd_audio.h index 4ec726c7b..1d1b52d14 100644 --- a/src/include/86box/fdd_audio.h +++ b/src/include/86box/fdd_audio.h @@ -88,6 +88,7 @@ extern const char* fdd_audio_get_profile_name(int id); extern const char* fdd_audio_get_profile_internal_name(int id); extern int fdd_audio_get_profile_by_internal_name(const char *internal_name); extern double fdd_audio_get_seek_time(int drive, int track_count, int is_seek_down); +extern void load_profile_samples(int profile_id); #else diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index edc61a566..e43e00917 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -313,6 +313,20 @@ SettingsFloppyCDROM::onFloppyRowChanged(const QModelIndex ¤t) int row = current.row(); ui->comboBoxFloppyAudio->clear(); + if (type == 0) { + ui->comboBoxFloppyAudio->addItem(tr("None"), 0); + ui->comboBoxFloppyAudio->setCurrentIndex(0); + ui->comboBoxFloppyAudio->setEnabled(false); + + // Update the model to reflect "None" profile + auto audioIdx = current.siblingAtColumn(3); + ui->tableViewFloppy->model()->setData(audioIdx, tr("None")); + ui->tableViewFloppy->model()->setData(audioIdx, 0, Qt::UserRole); + return; + } + + ui->comboBoxFloppyAudio->setEnabled(true); + // Get drive type's track count to determine 40-track vs 80-track int drive_max_tracks = fdd_get_type_max_track(type); bool is_40_track = (drive_max_tracks <= 43); @@ -327,7 +341,9 @@ SettingsFloppyCDROM::onFloppyRowChanged(const QModelIndex ¤t) const fdd_audio_profile_config_t *profile = fdd_audio_get_profile(i); if (profile) { // Only show profiles that match the drive type's track count - if ((is_40_track && profile->total_tracks == 40) || (!is_40_track && profile->total_tracks == 80) || profile->total_tracks == 0) { // Profile ID 0 is "None" + if (profile->total_tracks == 0 || + (is_40_track && profile->total_tracks == 40) || + (!is_40_track && profile->total_tracks == 80)) { ui->comboBoxFloppyAudio->addItem(name, i); if (i == prof) { currentProfileIndex = comboIndex; @@ -449,6 +465,9 @@ SettingsFloppyCDROM::on_comboBoxFloppyAudio_activated(int) } else { profName = tr("None"); } + if (prof > 0) { + load_profile_samples(prof); + } #else profName = tr("None"); #endif