From 850399d5c86c069b1ab7d3f68264e4991689b64a Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Mon, 13 Jul 2020 21:55:31 +0200 Subject: [PATCH] GUI refactoring and improvements --- src/inputdevice.cpp | 2 +- src/osdep/amiberry_gui.cpp | 15 -- src/osdep/gui/Navigation.cpp | 47 ++--- src/osdep/gui/PanelCPU.cpp | 46 ++--- src/osdep/gui/PanelChipset.cpp | 40 ++-- src/osdep/gui/PanelCustom.cpp | 31 +-- src/osdep/gui/PanelDisplay.cpp | 6 +- src/osdep/gui/PanelFloppy.cpp | 14 +- src/osdep/gui/PanelHD.cpp | 8 +- src/osdep/gui/PanelInput.cpp | 204 +++++++++++-------- src/osdep/gui/PanelQuickstart.cpp | 14 +- src/osdep/gui/PanelRAM.cpp | 16 +- src/osdep/gui/PanelSound.cpp | 312 ++++++++++++++++++------------ 13 files changed, 424 insertions(+), 331 deletions(-) diff --git a/src/inputdevice.cpp b/src/inputdevice.cpp index 1edd54a9..dd4af5bb 100644 --- a/src/inputdevice.cpp +++ b/src/inputdevice.cpp @@ -7065,7 +7065,7 @@ void inputdevice_default_prefs (struct uae_prefs *p) p->input_analog_joystick_mult = 15; p->input_analog_joystick_offset = -1; p->input_mouse_speed = amiberry_options.input_default_mouse_speed; - p->input_autofire_linecnt = 0; //8 * 312; // Disable Autofire by default + p->input_autofire_linecnt = 600; p->input_keyboard_type = 0; p->input_autoswitch = true; p->input_device_match_mask = -1; diff --git a/src/osdep/amiberry_gui.cpp b/src/osdep/amiberry_gui.cpp index c9e0eda9..300512a8 100644 --- a/src/osdep/amiberry_gui.cpp +++ b/src/osdep/amiberry_gui.cpp @@ -387,21 +387,6 @@ static void gui_to_prefs(void) static void after_leave_gui() { - // Check if we have to set or clear autofire - const auto new_af = changed_prefs.input_autofire_linecnt == 0 ? 0 : 1; - auto update = 0; - - for (auto num = 0; num < 2; ++num) - { - if (changed_prefs.jports[num].id < JSEM_MICE && changed_prefs.jports[num].autofire != new_af) - { - changed_prefs.jports[num].autofire = new_af; - update = 1; - } - } - if (update) - inputdevice_updateconfig(nullptr, &changed_prefs); - inputdevice_copyconfig(&changed_prefs, &currprefs); inputdevice_config_change_test(); } diff --git a/src/osdep/gui/Navigation.cpp b/src/osdep/gui/Navigation.cpp index d04e2d42..f0088e82 100644 --- a/src/osdep/gui/Navigation.cpp +++ b/src/osdep/gui/Navigation.cpp @@ -222,32 +222,35 @@ static NavigationMap navMap[] = // active move left move right move up move down //PanelSound - {"sndDisable", "Sound", "Mono", "sldPaulaVol", "sndDisEmu"}, - {"sndDisEmu", "Sound", "Stereo", "sndDisable", "sndEmulate"}, - {"sndEmulate", "Sound", "Stereo", "sndDisEmu", "sndEmuBest"}, - {"sndEmuBest", "Sound", "Stereo", "sndEmulate", "cboFrequency"}, - {"Mono", "sndDisable", "Sound", "sldStereoDelay", "Stereo"}, - {"Stereo", "sndDisEmu", "Sound", "Mono", "cboFrequency"}, - {"cboFrequency", "Sound", "Sound", "sndEmuBest", "cboInterpol"}, - {"cboInterpol", "Sound", "Sound", "cboFrequency", "cboFilter"}, - {"cboFilter", "Sound", "Sound", "cboInterpol", "sldSeparation"}, - {"sldSeparation", "", "", "cboFilter", "sldStereoDelay"}, - {"sldStereoDelay", "", "", "sldSeparation", "sldPaulaVol"}, - {"sldPaulaVol", "", "", "sldStereoDelay", "sndDisable"}, + {"sndDisable", "Sound", "sldPaulaVol", "cboFrequency", "sndDisEmu"}, + {"sndDisEmu", "Sound", "sldPaulaVol", "sndDisable", "sndEmulate"}, + {"sndEmulate", "Sound", "sldPaulaVol", "sndDisEmu", "sndEmuBest"}, + {"sndEmuBest", "Sound", "sldPaulaVol", "sndEmulate", "cboChannelMode"}, + {"cboChannelMode", "Sound", "cboSeparation", "sndEmuBest", "cboFrequency"}, + {"cboFrequency", "Sound", "cboFilter", "cboChannelMode", "sndDisable"}, + {"cboInterpol", "cboSeparation", "Sound", "sldPaulaVol", "cboFilter"}, + {"cboFilter", "Sound", "Sound", "cboInterpol", "sldPaulaVol"}, + {"cboSeparation", "cboChannelMode", "cboInterpol", "sndEmuBest", "cboStereoDelay"}, + {"cboStereoDelay", "cboFrequency", "cboFilter", "cboSeparation", "sldPaulaVol"}, + {"sldPaulaVol", "", "", "cboStereoDelay", "cboInterpol"}, // active move left move right move up move down // PanelInput - {"cboPort0", "Input", "cboPort0mode", "cboAutofire", "cboPort1"}, - {"cboPort0mode", "cboPort0", "Input", "cboTapDelay", "cboPort1mode"}, - {"cboPort1", "Input", "cboPort1mode", "cboPort0", "cboPort2"}, - {"cboPort1mode", "cboPort1", "Input", "cboPort0mode", "cboPort2"}, - {"cboPort2", "Input", "cboPort2mode", "cboPort1", "cboPort3"}, - {"cboPort3", "Input", "cboPort3mode", "cboPort2", "cboPort0mousemode"}, - {"cboPort0mousemode", "Input", "MouseSpeed", "cboPort3", "cboPort1mousemode"}, - {"cboPort1mousemode", "Input", "MouseSpeed", "cboPort0mousemode", "cboAutofire"}, + {"cboPort0", "Input", "Input", "cboAutofireRate", "cboPort0Autofire"}, + {"cboPort0Autofire", "Input", "cboPort0mode", "cboPort0", "cboPort1"}, + {"cboPort0mode", "cboPort0Autofire", "Input", "cboPort0", "cboPort1"}, + {"cboPort1", "Input", "Input", "cboPort0Autofire", "cboPort1Autofire"}, + {"cboPort1Autofire", "Input", "cboPort1mode", "cboPort1", "cboPort2"}, + {"cboPort1mode", "cboPort1Autofire", "Input", "cboPort1", "cboPort2"}, + {"cboPort2", "Input", "Input", "cboPort1Autofire", "cboPort2Autofire"}, + {"cboPort2Autofire", "Input", "Input", "cboPort2", "cboPort3"}, + {"cboPort3", "Input", "Input", "cboPort2Autofire", "cboPort3Autofire"}, + {"cboPort3Autofire", "Input", "Input", "cboPort3", "cboPort0mousemode"}, + {"cboPort0mousemode", "Input", "MouseSpeed", "cboPort3Autofire", "cboPort1mousemode"}, + {"cboPort1mousemode", "Input", "MouseSpeed", "cboPort0mousemode", "cboAutofireRate"}, {"MouseSpeed", "", "", "cboPort3", "MouseHack"}, - {"MouseHack", "cboAutofire", "cboAutofire", "MouseSpeed", "cboPort0"}, - {"cboAutofire", "Input", "MouseHack", "cboPort1mousemode", "cboPort0"}, + {"MouseHack", "cboAutofireRate", "cboAutofireRate", "MouseSpeed", "cboPort0"}, + {"cboAutofireRate", "Input", "MouseHack", "cboPort1mousemode", "cboPort0"}, // PanelCustom {"0: Mouse", "Custom controls", "1: Joystick", "chkAnalogRemap", "None"}, diff --git a/src/osdep/gui/PanelCPU.cpp b/src/osdep/gui/PanelCPU.cpp index af9b8ade..751061a6 100644 --- a/src/osdep/gui/PanelCPU.cpp +++ b/src/osdep/gui/PanelCPU.cpp @@ -274,16 +274,16 @@ void InitPanelCPU(const struct _ConfigCategory& category) grpCPU = new gcn::Window("CPU"); grpCPU->setPosition(DISTANCE_BORDER, DISTANCE_BORDER); - grpCPU->add(optCPU68000, 5, 10); - grpCPU->add(optCPU68010, 5, 40); - grpCPU->add(optCPU68020, 5, 70); - grpCPU->add(optCPU68030, 5, 100); - grpCPU->add(optCPU68040, 5, 130); - grpCPU->add(chk24Bit, 5, 170); - grpCPU->add(chkCPUCompatible, 5, 200); - grpCPU->add(chkJIT, 5, 230); + grpCPU->add(optCPU68000, 10, 10); + grpCPU->add(optCPU68010, 10, 40); + grpCPU->add(optCPU68020, 10, 70); + grpCPU->add(optCPU68030, 10, 100); + grpCPU->add(optCPU68040, 10, 130); + grpCPU->add(chk24Bit, 10, 170); + grpCPU->add(chkCPUCompatible, 10, 200); + grpCPU->add(chkJIT, 10, 230); grpCPU->setMovable(false); - grpCPU->setSize(175, 285); + grpCPU->setSize(chk24Bit->getWidth() + 20, 285); grpCPU->setTitleBarHeight(TITLEBAR_HEIGHT); grpCPU->setBaseColor(gui_baseCol); @@ -317,14 +317,14 @@ void InitPanelCPU(const struct _ConfigCategory& category) grpFPU = new gcn::Window("FPU"); grpFPU->setPosition(DISTANCE_BORDER + grpCPU->getWidth() + DISTANCE_NEXT_X, DISTANCE_BORDER); - grpFPU->add(optFPUnone, 5, 10); - grpFPU->add(optFPU68881, 5, 40); - grpFPU->add(optFPU68882, 5, 70); - grpFPU->add(optFPUinternal, 5, 100); - grpFPU->add(chkFPUstrict, 5, 140); - grpFPU->add(chkFPUJIT, 5, 170); + grpFPU->add(optFPUnone, 10, 10); + grpFPU->add(optFPU68881, 10, 40); + grpFPU->add(optFPU68882, 10, 70); + grpFPU->add(optFPUinternal, 10, 100); + grpFPU->add(chkFPUstrict, 10, 140); + grpFPU->add(chkFPUJIT, 10, 170); grpFPU->setMovable(false); - grpFPU->setSize(185, 225); + grpFPU->setSize(175, 225); grpFPU->setTitleBarHeight(TITLEBAR_HEIGHT); grpFPU->setBaseColor(gui_baseCol); @@ -359,14 +359,14 @@ void InitPanelCPU(const struct _ConfigCategory& category) grpCPUSpeed = new gcn::Window("CPU Speed"); grpCPUSpeed->setPosition(grpFPU->getX() + grpFPU->getWidth() + DISTANCE_NEXT_X, DISTANCE_BORDER); - grpCPUSpeed->add(opt7Mhz, 5, 10); - grpCPUSpeed->add(opt14Mhz, 5, 40); - grpCPUSpeed->add(opt25Mhz, 5, 70); - grpCPUSpeed->add(optFastest, 5, 100); - grpCPUSpeed->add(lblCpuIdle, 5, 170); - grpCPUSpeed->add(sldCpuIdle, lblCpuIdle->getWidth() + 10, 170); + grpCPUSpeed->add(opt7Mhz, 10, 10); + grpCPUSpeed->add(opt14Mhz, 10, 40); + grpCPUSpeed->add(opt25Mhz, 10, 70); + grpCPUSpeed->add(optFastest, 10, 100); + grpCPUSpeed->add(lblCpuIdle, 10, 160); + grpCPUSpeed->add(sldCpuIdle, lblCpuIdle->getWidth() + 20, 160); grpCPUSpeed->setMovable(false); - grpCPUSpeed->setSize(180, 250); + grpCPUSpeed->setSize(175, 225); grpCPUSpeed->setTitleBarHeight(TITLEBAR_HEIGHT); grpCPUSpeed->setBaseColor(gui_baseCol); diff --git a/src/osdep/gui/PanelChipset.cpp b/src/osdep/gui/PanelChipset.cpp index fa6279a4..dadbc3ea 100644 --- a/src/osdep/gui/PanelChipset.cpp +++ b/src/osdep/gui/PanelChipset.cpp @@ -223,7 +223,7 @@ void InitPanelChipset(const struct _ConfigCategory& category) lblChipset = new gcn::Label("Extra:"); lblChipset->setAlignment(gcn::Graphics::RIGHT); cboChipset = new gcn::DropDown(&chipsetList); - cboChipset->setSize(75, cboChipset->getHeight()); + cboChipset->setSize(100, cboChipset->getHeight()); cboChipset->setBaseColor(gui_baseCol); cboChipset->setBackgroundColor(colTextboxBackground); cboChipset->setId("ChipsetExtra"); @@ -231,16 +231,16 @@ void InitPanelChipset(const struct _ConfigCategory& category) grpChipset = new gcn::Window("Chipset"); grpChipset->setPosition(DISTANCE_BORDER, DISTANCE_BORDER); - grpChipset->add(optOCS, 5, 10); - grpChipset->add(optECSAgnus, 5, 40); - grpChipset->add(optECS, 5, 70); - grpChipset->add(optAGA, 5, 100); - grpChipset->add(chkNTSC, 5, 140); + grpChipset->add(optOCS, 10, 10); + grpChipset->add(optECSAgnus, 10, 40); + grpChipset->add(optECS, 10, 70); + grpChipset->add(optAGA, 10, 100); + grpChipset->add(chkNTSC, 10, 140); grpChipset->add(lblChipset, 145, 10); - grpChipset->add(cboChipset, 145 + lblChipset->getWidth() + 8, 10); + grpChipset->add(cboChipset, 145 + lblChipset->getWidth() + 10, 10); grpChipset->setMovable(false); - grpChipset->setSize(optOCS->getWidth() + 125 + lblChipset->getWidth() + cboChipset->getWidth(), 195); + grpChipset->setSize(optOCS->getWidth() + 125 + lblChipset->getWidth() + cboChipset->getWidth(), 205); grpChipset->setTitleBarHeight(TITLEBAR_HEIGHT); grpChipset->setBaseColor(gui_baseCol); @@ -256,17 +256,17 @@ void InitPanelChipset(const struct _ConfigCategory& category) optBlitImmed->setId("Immediate"); optBlitImmed->addActionListener(blitterButtonActionListener); - optBlitWait = new gcn::RadioButton("Wait for blit.", "radiocblittergroup"); + optBlitWait = new gcn::RadioButton("Wait for blitter", "radiocblittergroup"); optBlitWait->setId("BlitWait"); optBlitWait->addActionListener(blitterButtonActionListener); grpBlitter = new gcn::Window("Blitter"); grpBlitter->setPosition(DISTANCE_BORDER + grpChipset->getWidth() + DISTANCE_NEXT_X, DISTANCE_BORDER); - grpBlitter->add(optBlitNormal, 5, 10); - grpBlitter->add(optBlitImmed, 5, 40); - grpBlitter->add(optBlitWait, 5, 70); + grpBlitter->add(optBlitNormal, 10, 10); + grpBlitter->add(optBlitImmed, 10, 40); + grpBlitter->add(optBlitWait, 10, 70); grpBlitter->setMovable(false); - grpBlitter->setSize(optBlitWait->getWidth() + DISTANCE_BORDER, 125); + grpBlitter->setSize(optBlitWait->getWidth() + DISTANCE_BORDER + 10, 125); grpBlitter->setTitleBarHeight(TITLEBAR_HEIGHT); grpBlitter->setBaseColor(gui_baseCol); @@ -281,9 +281,9 @@ void InitPanelChipset(const struct _ConfigCategory& category) grpCopper = new gcn::Window("Copper"); grpCopper->setPosition(DISTANCE_BORDER + grpChipset->getWidth() + DISTANCE_NEXT_X, grpBlitter->getY() + grpBlitter->getHeight() + DISTANCE_NEXT_Y); - grpCopper->add(chkFastCopper, 5, 10); + grpCopper->add(chkFastCopper, 10, 10); grpCopper->setMovable(false); - grpCopper->setSize(chkFastCopper->getWidth() + DISTANCE_BORDER, 65); + grpCopper->setSize(grpBlitter->getWidth(), 65); grpCopper->setTitleBarHeight(TITLEBAR_HEIGHT); grpCopper->setBaseColor(gui_baseCol); @@ -309,12 +309,12 @@ void InitPanelChipset(const struct _ConfigCategory& category) grpCollisionLevel = new gcn::Window("Collision Level"); grpCollisionLevel->setPosition(DISTANCE_BORDER, DISTANCE_BORDER + grpChipset->getHeight() + DISTANCE_NEXT_Y); - grpCollisionLevel->add(optCollNone, 5, 10); - grpCollisionLevel->add(optCollSprites, 5, 40); - grpCollisionLevel->add(optCollPlayfield, 5, 70); - grpCollisionLevel->add(optCollFull, 5, 100); + grpCollisionLevel->add(optCollNone, 10, 10); + grpCollisionLevel->add(optCollSprites, 10, 40); + grpCollisionLevel->add(optCollPlayfield, 10, 70); + grpCollisionLevel->add(optCollFull, 10, 100); grpCollisionLevel->setMovable(false); - grpCollisionLevel->setSize(optCollPlayfield->getWidth() + DISTANCE_BORDER, 155); + grpCollisionLevel->setSize(grpChipset->getWidth(), 165); grpCollisionLevel->setTitleBarHeight(TITLEBAR_HEIGHT); grpCollisionLevel->setBaseColor(gui_baseCol); diff --git a/src/osdep/gui/PanelCustom.cpp b/src/osdep/gui/PanelCustom.cpp index d0bac120..fa8b892d 100644 --- a/src/osdep/gui/PanelCustom.cpp +++ b/src/osdep/gui/PanelCustom.cpp @@ -377,23 +377,23 @@ void InitPanelCustom(const struct _ConfigCategory& category) grpPort = new gcn::Window("Joystick Port"); grpPort->setPosition(DISTANCE_BORDER, DISTANCE_BORDER); - grpPort->add(optPort0, 10, 5); - grpPort->add(optPort1, 150, 5); - grpPort->add(optPort2, 290, 5); - grpPort->add(optPort3, 430, 5); - grpPort->setSize(580, 50); + grpPort->add(optPort0, 10, 10); + grpPort->add(optPort1, optPort0->getX() + optPort0->getWidth() + DISTANCE_NEXT_X, optPort0->getY()); + grpPort->add(optPort2, optPort1->getX() + optPort1->getWidth() + DISTANCE_NEXT_X, optPort0->getY()); + grpPort->add(optPort3, optPort2->getX() + optPort2->getWidth() + DISTANCE_NEXT_X, optPort0->getY()); + grpPort->setSize(category.panel->getWidth() - DISTANCE_BORDER * 2, TITLEBAR_HEIGHT + optPort0->getHeight() * 3); grpPort->setTitleBarHeight(TITLEBAR_HEIGHT); grpPort->setBaseColor(gui_baseCol); category.panel->add(grpPort); grpFunction = new gcn::Window("Function Key"); - grpFunction->setPosition(DISTANCE_BORDER, 75); - grpFunction->add(optMultiNone, 10, 5); - grpFunction->add(optMultiSelect, 150, 5); + grpFunction->setPosition(DISTANCE_BORDER, grpPort->getY() + grpPort->getHeight() + DISTANCE_NEXT_Y); + grpFunction->add(optMultiNone, 10, 10); + grpFunction->add(optMultiSelect, optMultiNone->getX() + optMultiNone->getWidth() + DISTANCE_NEXT_X, optMultiNone->getY()); // grpFunction->add(optMultiLeft, 290, 5); // grpFunction->add(optMultiRight, 430, 5); - grpFunction->setSize(580, 50); + grpFunction->setSize(grpPort->getWidth(), grpPort->getHeight()); grpFunction->setTitleBarHeight(TITLEBAR_HEIGHT); grpFunction->setBaseColor(gui_baseCol); @@ -446,7 +446,12 @@ void InitPanelCustom(const struct _ConfigCategory& category) cboCustomAction[i]->addActionListener(customActionListener); } - auto posY = 144 + 40; + auto posY = grpFunction->getY() + grpFunction->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(lblPortInput, DISTANCE_BORDER, posY); + category.panel->add(txtPortInput, lblPortInput->getX() + lblPortInput->getWidth() + DISTANCE_NEXT_X, posY); + category.panel->add(lblRetroarch, txtPortInput->getX() + txtPortInput->getWidth() + DISTANCE_NEXT_X, posY); + posY = txtPortInput->getY() + txtPortInput->getHeight() + DISTANCE_NEXT_Y * 2; + for (i = 0; i < 7; ++i) { category.panel->add(lblCustomAction[i], DISTANCE_BORDER / 2, posY); @@ -454,7 +459,7 @@ void InitPanelCustom(const struct _ConfigCategory& category) posY = posY + DROPDOWN_HEIGHT + 6; } - posY = 144 + 40; + posY = txtPortInput->getY() + txtPortInput->getHeight() + DISTANCE_NEXT_Y * 2; for (i = 7; i < 14; ++i) { category.panel->add(lblCustomAction[i], DISTANCE_BORDER + 290, posY); @@ -465,10 +470,6 @@ void InitPanelCustom(const struct _ConfigCategory& category) category.panel->add(chkAnalogRemap, DISTANCE_BORDER + lblCustomAction[0]->getWidth(), posY); posY += chkAnalogRemap->getHeight() + DISTANCE_NEXT_Y; - category.panel->add(lblPortInput, DISTANCE_BORDER, 144); - category.panel->add(txtPortInput, lblPortInput->getX() + lblPortInput->getWidth() + DISTANCE_NEXT_X, 144); - category.panel->add(lblRetroarch, txtPortInput->getX() + txtPortInput->getWidth() + DISTANCE_NEXT_X, 144); - // optMultiLeft->setEnabled(false); // optMultiRight->setEnabled(false); diff --git a/src/osdep/gui/PanelDisplay.cpp b/src/osdep/gui/PanelDisplay.cpp index edd19eab..a517268f 100644 --- a/src/osdep/gui/PanelDisplay.cpp +++ b/src/osdep/gui/PanelDisplay.cpp @@ -229,7 +229,7 @@ void InitPanelDisplay(const struct _ConfigCategory& category) lblScreenmode = new gcn::Label("Screen mode:"); lblScreenmode->setAlignment(gcn::Graphics::RIGHT); cboScreenmode = new gcn::DropDown(&fullscreen_modes_list); - cboScreenmode->setSize(100, cboScreenmode->getHeight()); + cboScreenmode->setSize(125, cboScreenmode->getHeight()); cboScreenmode->setBaseColor(gui_baseCol); cboScreenmode->setBackgroundColor(colTextboxBackground); cboScreenmode->setId("cboScreenmode"); @@ -290,7 +290,7 @@ void InitPanelDisplay(const struct _ConfigCategory& category) grpScalingMethod->add(optNearest, 5, 40); grpScalingMethod->add(optLinear, 5, 70); grpScalingMethod->setMovable(false); - grpScalingMethod->setSize(optNearest->getWidth() + DISTANCE_BORDER, + grpScalingMethod->setSize(grpAmigaScreen->getWidth(), optLinear->getY() + optLinear->getHeight() + DISTANCE_BORDER * 3); grpScalingMethod->setTitleBarHeight(TITLEBAR_HEIGHT); grpScalingMethod->setBaseColor(gui_baseCol); @@ -319,7 +319,7 @@ void InitPanelDisplay(const struct _ConfigCategory& category) grpLineMode->add(optDouble, 5, 40); grpLineMode->add(optScanlines, 5, 70); grpLineMode->setMovable(false); - grpLineMode->setSize(optScanlines->getWidth() + DISTANCE_BORDER, + grpLineMode->setSize(grpCentering->getWidth(), optScanlines->getY() + optScanlines->getHeight() + DISTANCE_BORDER * 3); grpLineMode->setTitleBarHeight(TITLEBAR_HEIGHT); grpLineMode->setBaseColor(gui_baseCol); diff --git a/src/osdep/gui/PanelFloppy.cpp b/src/osdep/gui/PanelFloppy.cpp index 7d8c7656..d1044900 100644 --- a/src/osdep/gui/PanelFloppy.cpp +++ b/src/osdep/gui/PanelFloppy.cpp @@ -371,7 +371,7 @@ void InitPanelFloppy(const struct _ConfigCategory& category) int posX; auto posY = DISTANCE_BORDER; int i; - const auto textFieldWidth = category.panel->getWidth() - 2 * DISTANCE_BORDER - SMALL_BUTTON_WIDTH - DISTANCE_NEXT_X; + const auto textFieldWidth = category.panel->getWidth() - 2 * DISTANCE_BORDER; dfxCheckActionListener = new DFxCheckActionListener(); driveTypeActionListener = new DriveTypeActionListener(); @@ -447,19 +447,19 @@ void InitPanelFloppy(const struct _ConfigCategory& category) lblDriveSpeedInfo = new gcn::Label(drive_speed_list[1]); cmdSaveForDisk = new gcn::Button("Save config for disk"); - cmdSaveForDisk->setSize(cmdSaveForDisk->getWidth(), BUTTON_HEIGHT); + cmdSaveForDisk->setSize(cmdSaveForDisk->getWidth() + 10, BUTTON_HEIGHT); cmdSaveForDisk->setBaseColor(gui_baseCol); cmdSaveForDisk->setId("SaveForDisk"); cmdSaveForDisk->addActionListener(saveForDiskActionListener); cmdCreateDDDisk = new gcn::Button("Create 3.5'' DD disk"); - cmdCreateDDDisk->setSize(cmdCreateDDDisk->getWidth(), BUTTON_HEIGHT); + cmdCreateDDDisk->setSize(cmdCreateDDDisk->getWidth() + 10, BUTTON_HEIGHT); cmdCreateDDDisk->setBaseColor(gui_baseCol); cmdCreateDDDisk->setId("CreateDD"); cmdCreateDDDisk->addActionListener(createDiskActionListener); cmdCreateHDDisk = new gcn::Button("Create 3.5'' HD disk"); - cmdCreateHDDisk->setSize(cmdCreateHDDisk->getWidth(), BUTTON_HEIGHT); + cmdCreateHDDisk->setSize(cmdCreateHDDisk->getWidth() + 10, BUTTON_HEIGHT); cmdCreateHDDisk->setBaseColor(gui_baseCol); cmdCreateHDDisk->setId("CreateHD"); cmdCreateHDDisk->addActionListener(createDiskActionListener); @@ -468,11 +468,11 @@ void InitPanelFloppy(const struct _ConfigCategory& category) { posX = DISTANCE_BORDER; category.panel->add(chkDFx[i], posX, posY); - posX += 80; + posX += chkDFx[i]->getWidth() + DISTANCE_NEXT_X * 2; category.panel->add(cboDFxType[i], posX, posY); - posX += cboDFxType[i]->getWidth() + 2 * DISTANCE_NEXT_X; + posX += cboDFxType[i]->getWidth() + DISTANCE_NEXT_X * 2; category.panel->add(chkDFxWriteProtect[i], posX, posY); - posX += chkDFxWriteProtect[i]->getWidth() + 4 * DISTANCE_NEXT_X; + posX += 3 + chkDFxWriteProtect[i]->getWidth() + 7 * DISTANCE_NEXT_X; //category.panel->add(cmdDFxInfo[i], posX, posY); //TODO disabled? //posX += cmdDFxInfo[i]->getWidth() + DISTANCE_NEXT_X; category.panel->add(cmdDFxEject[i], posX, posY); diff --git a/src/osdep/gui/PanelHD.cpp b/src/osdep/gui/PanelHD.cpp index 985977c1..4f1fecb9 100644 --- a/src/osdep/gui/PanelHD.cpp +++ b/src/osdep/gui/PanelHD.cpp @@ -398,19 +398,19 @@ void InitPanelHD(const struct _ConfigCategory& category) cmdAddDirectory = new gcn::Button("Add Directory"); cmdAddDirectory->setBaseColor(gui_baseCol); - cmdAddDirectory->setSize(cmdAddDirectory->getWidth(), BUTTON_HEIGHT); + cmdAddDirectory->setSize(cmdAddDirectory->getWidth() + 10, BUTTON_HEIGHT); cmdAddDirectory->setId("cmdAddDir"); cmdAddDirectory->addActionListener(addVirtualHDActionListener); cmdAddHardfile = new gcn::Button("Add Hardfile"); cmdAddHardfile->setBaseColor(gui_baseCol); - cmdAddHardfile->setSize(cmdAddHardfile->getWidth(), BUTTON_HEIGHT); + cmdAddHardfile->setSize(cmdAddHardfile->getWidth() + 10, BUTTON_HEIGHT); cmdAddHardfile->setId("cmdAddHDF"); cmdAddHardfile->addActionListener(addHardfileActionListener); cmdCreateHardfile = new gcn::Button("Create Hardfile"); cmdCreateHardfile->setBaseColor(gui_baseCol); - cmdCreateHardfile->setSize(cmdCreateHardfile->getWidth(), BUTTON_HEIGHT); + cmdCreateHardfile->setSize(cmdCreateHardfile->getWidth() + 10, BUTTON_HEIGHT); cmdCreateHardfile->setId("cmdCreateHDF"); cmdCreateHardfile->addActionListener(createHardfileActionListener); @@ -492,7 +492,7 @@ void InitPanelHD(const struct _ConfigCategory& category) posY += cmdAddDirectory->getHeight() + DISTANCE_NEXT_Y; category.panel->add(chkHDReadOnly, DISTANCE_BORDER, posY); - category.panel->add(chkScsi, cmdCreateHardfile->getX() + cmdCreateHardfile->getWidth(), posY); + category.panel->add(chkScsi, chkHDReadOnly->getX() + chkHDReadOnly->getWidth() + DISTANCE_NEXT_X * 3, posY); posY += chkHDReadOnly->getHeight() + DISTANCE_NEXT_Y; category.panel->add(chkCD, DISTANCE_BORDER, posY + 2); diff --git a/src/osdep/gui/PanelInput.cpp b/src/osdep/gui/PanelInput.cpp index de02b37c..b469dfd1 100644 --- a/src/osdep/gui/PanelInput.cpp +++ b/src/osdep/gui/PanelInput.cpp @@ -23,6 +23,11 @@ static gcn::DropDown* cboPort0; static gcn::Label* lblPort1; static gcn::DropDown* cboPort1; +static gcn::DropDown* cboPort0Autofire; +static gcn::DropDown* cboPort1Autofire; +static gcn::DropDown* cboPort2Autofire; +static gcn::DropDown* cboPort3Autofire; + static gcn::DropDown* cboPort0mode; static gcn::DropDown* cboPort1mode; @@ -31,16 +36,14 @@ static gcn::DropDown* cboPort0mousemode; static gcn::Label* lblPort1mousemode; static gcn::DropDown* cboPort1mousemode; +static gcn::Label* lblParallelPortAdapter; static gcn::Label* lblPort2; static gcn::DropDown* cboPort2; static gcn::Label* lblPort3; static gcn::DropDown* cboPort3; -static gcn::DropDown* cboPort2mode; -static gcn::DropDown* cboPort3mode; - -static gcn::Label* lblAutofire; -static gcn::DropDown* cboAutofire; +static gcn::Label* lblAutofireRate; +static gcn::DropDown* cboAutofireRate; static gcn::Label* lblMouseSpeed; static gcn::Label* lblMouseSpeedInfo; static gcn::Slider* sldMouseSpeed; @@ -79,14 +82,17 @@ public: static StringListModel ctrlPortList(nullptr, 0); static int portListIDs[MAX_INPUT_DEVICES]; -const char* autofireValues[] = {"Off", "Slow", "Medium", "Fast"}; -StringListModel autofireList(autofireValues, 4); +const char* autoFireValues[] = { "No autofire", "Autofire", "Autofire (toggle)", "Autofire (always)" }; +StringListModel autoFireList(autoFireValues, 4); -const char* mousemapValues[] = {"None", "Left", "Right", "Both"}; +const char* autoFireRateValues[] = { "Off", "Slow", "Medium", "Fast" }; +StringListModel autoFireRateList(autoFireRateValues, 4); + +const char* mousemapValues[] = { "None", "Left", "Right", "Both" }; StringListModel ctrlPortMouseModeList(mousemapValues, 4); -const char* joyportmodes[] = {"Mouse", "Joystick", "CD32", "Default"}; -StringListModel ctrlPortModeList(joyportmodes, 4); +const char* joyportmodes[] = { "Default", "Wheel Mouse", "Mouse", "Joystick", "Gamepad", "Analog Joystick", "CDTV remote mouse", "CD32 pad"}; +StringListModel ctrlPortModeList(joyportmodes, 8); class InputActionListener : public gcn::ActionListener { @@ -175,32 +181,25 @@ public: set_port(sel, current_port); } + else if (actionEvent.getSource() == cboPort0Autofire) + changed_prefs.jports[0].autofire = cboPort0Autofire->getSelected(); + else if (actionEvent.getSource() == cboPort1Autofire) + changed_prefs.jports[1].autofire = cboPort1Autofire->getSelected(); + else if (actionEvent.getSource() == cboPort2Autofire) + changed_prefs.jports[2].autofire = cboPort2Autofire->getSelected(); + else if (actionEvent.getSource() == cboPort3Autofire) + changed_prefs.jports[3].autofire = cboPort3Autofire->getSelected(); + else if (actionEvent.getSource() == cboPort0mode) { - if (cboPort0mode->getSelected() == 0) - changed_prefs.jports[0].mode = JSEM_MODE_MOUSE; - else if (cboPort0mode->getSelected() == 1) - changed_prefs.jports[0].mode = JSEM_MODE_JOYSTICK; - else if (cboPort0mode->getSelected() == 2) - changed_prefs.jports[0].mode = JSEM_MODE_JOYSTICK_CD32; - else - changed_prefs.jports[0].mode = JSEM_MODE_DEFAULT; - + changed_prefs.jports[0].mode = cboPort0mode->getSelected(); inputdevice_updateconfig(nullptr, &changed_prefs); RefreshPanelInput(); RefreshPanelCustom(); } else if (actionEvent.getSource() == cboPort1mode) { - if (cboPort1mode->getSelected() == 0) - changed_prefs.jports[1].mode = JSEM_MODE_MOUSE; - else if (cboPort1mode->getSelected() == 1) - changed_prefs.jports[1].mode = JSEM_MODE_JOYSTICK; - else if (cboPort1mode->getSelected() == 2) - changed_prefs.jports[1].mode = JSEM_MODE_JOYSTICK_CD32; - else - changed_prefs.jports[1].mode = JSEM_MODE_DEFAULT; - + changed_prefs.jports[1].mode = cboPort1mode->getSelected(); inputdevice_updateconfig(nullptr, &changed_prefs); RefreshPanelInput(); RefreshPanelCustom(); @@ -218,13 +217,13 @@ public: inputdevice_updateconfig(nullptr, &changed_prefs); } - else if (actionEvent.getSource() == cboAutofire) + else if (actionEvent.getSource() == cboAutofireRate) { - if (cboAutofire->getSelected() == 0) + if (cboAutofireRate->getSelected() == 0) changed_prefs.input_autofire_linecnt = 0; - else if (cboAutofire->getSelected() == 1) + else if (cboAutofireRate->getSelected() == 1) changed_prefs.input_autofire_linecnt = 12 * 312; - else if (cboAutofire->getSelected() == 2) + else if (cboAutofireRate->getSelected() == 2) changed_prefs.input_autofire_linecnt = 8 * 312; else changed_prefs.input_autofire_linecnt = 4 * 312; @@ -283,18 +282,45 @@ void InitPanelInput(const struct _ConfigCategory& category) } inputActionListener = new InputActionListener(); - const auto textFieldWidth = category.panel->getWidth() - (2 * DISTANCE_BORDER - SMALL_BUTTON_WIDTH - DISTANCE_NEXT_X - ); + const auto textFieldWidth = category.panel->getWidth() - 2 * DISTANCE_BORDER - 60; - lblPort0 = new gcn::Label("Port 0 [Mouse]:"); + lblPort0 = new gcn::Label("Port 0:"); lblPort0->setAlignment(gcn::Graphics::RIGHT); cboPort0 = new gcn::DropDown(&ctrlPortList); - cboPort0->setSize(textFieldWidth / 2, cboPort0->getHeight()); + cboPort0->setSize(textFieldWidth, cboPort0->getHeight()); cboPort0->setBaseColor(gui_baseCol); cboPort0->setBackgroundColor(colTextboxBackground); cboPort0->setId("cboPort0"); cboPort0->addActionListener(inputActionListener); + cboPort0Autofire = new gcn::DropDown(&autoFireList); + cboPort0Autofire->setSize(150, cboPort0Autofire->getHeight()); + cboPort0Autofire->setBaseColor(gui_baseCol); + cboPort0Autofire->setBackgroundColor(colTextboxBackground); + cboPort0Autofire->setId("cboPort0Autofire"); + cboPort0Autofire->addActionListener(inputActionListener); + + cboPort1Autofire = new gcn::DropDown(&autoFireList); + cboPort1Autofire->setSize(150, cboPort1Autofire->getHeight()); + cboPort1Autofire->setBaseColor(gui_baseCol); + cboPort1Autofire->setBackgroundColor(colTextboxBackground); + cboPort1Autofire->setId("cboPort1Autofire"); + cboPort1Autofire->addActionListener(inputActionListener); + + cboPort2Autofire = new gcn::DropDown(&autoFireList); + cboPort2Autofire->setSize(150, cboPort2Autofire->getHeight()); + cboPort2Autofire->setBaseColor(gui_baseCol); + cboPort2Autofire->setBackgroundColor(colTextboxBackground); + cboPort2Autofire->setId("cboPort2Autofire"); + cboPort2Autofire->addActionListener(inputActionListener); + + cboPort3Autofire = new gcn::DropDown(&autoFireList); + cboPort3Autofire->setSize(150, cboPort3Autofire->getHeight()); + cboPort3Autofire->setBaseColor(gui_baseCol); + cboPort3Autofire->setBackgroundColor(colTextboxBackground); + cboPort3Autofire->setId("cboPort3Autofire"); + cboPort3Autofire->addActionListener(inputActionListener); + cboPort0mode = new gcn::DropDown(&ctrlPortModeList); cboPort0mode->setSize(cboPort0mode->getWidth(), cboPort0mode->getHeight()); cboPort0mode->setBaseColor(gui_baseCol); @@ -302,11 +328,11 @@ void InitPanelInput(const struct _ConfigCategory& category) cboPort0mode->setId("cboPort0mode"); cboPort0mode->addActionListener(inputActionListener); - lblPort1 = new gcn::Label("Port 1 [Joystick]:"); + lblPort1 = new gcn::Label("Port 1:"); lblPort1->setAlignment(gcn::Graphics::RIGHT); lblPort0->setSize(lblPort1->getWidth(), lblPort0->getHeight()); cboPort1 = new gcn::DropDown(&ctrlPortList); - cboPort1->setSize(textFieldWidth / 2, cboPort1->getHeight()); + cboPort1->setSize(textFieldWidth, cboPort1->getHeight()); cboPort1->setBaseColor(gui_baseCol); cboPort1->setBackgroundColor(colTextboxBackground); cboPort1->setId("cboPort1"); @@ -319,19 +345,22 @@ void InitPanelInput(const struct _ConfigCategory& category) cboPort1mode->setId("cboPort1mode"); cboPort1mode->addActionListener(inputActionListener); - lblPort2 = new gcn::Label("Port 2 [Parallel 1]:"); + lblParallelPortAdapter = new gcn::Label("Emulated parallel port joystick adapter"); + lblParallelPortAdapter->setAlignment(gcn::Graphics::LEFT); + + lblPort2 = new gcn::Label("Port 2:"); lblPort2->setAlignment(gcn::Graphics::LEFT); cboPort2 = new gcn::DropDown(&ctrlPortList); - cboPort2->setSize(textFieldWidth / 2, cboPort2->getHeight()); + cboPort2->setSize(textFieldWidth, cboPort2->getHeight()); cboPort2->setBaseColor(gui_baseCol); cboPort2->setBackgroundColor(colTextboxBackground); cboPort2->setId("cboPort2"); cboPort2->addActionListener(inputActionListener); - lblPort3 = new gcn::Label("Port 3 [Parallel 2]:"); + lblPort3 = new gcn::Label("Port 3:"); lblPort3->setAlignment(gcn::Graphics::LEFT); cboPort3 = new gcn::DropDown(&ctrlPortList); - cboPort3->setSize(textFieldWidth / 2, cboPort3->getHeight()); + cboPort3->setSize(textFieldWidth, cboPort3->getHeight()); cboPort3->setBaseColor(gui_baseCol); cboPort3->setBackgroundColor(colTextboxBackground); cboPort3->setId("cboPort3"); @@ -355,14 +384,14 @@ void InitPanelInput(const struct _ConfigCategory& category) cboPort1mousemode->setId("cboPort1mousemode"); cboPort1mousemode->addActionListener(inputActionListener); - lblAutofire = new gcn::Label("Autofire Rate:"); - lblAutofire->setAlignment(gcn::Graphics::RIGHT); - cboAutofire = new gcn::DropDown(&autofireList); - cboAutofire->setSize(80, cboAutofire->getHeight()); - cboAutofire->setBaseColor(gui_baseCol); - cboAutofire->setBackgroundColor(colTextboxBackground); - cboAutofire->setId("cboAutofire"); - cboAutofire->addActionListener(inputActionListener); + lblAutofireRate = new gcn::Label("Autofire Rate:"); + lblAutofireRate->setAlignment(gcn::Graphics::RIGHT); + cboAutofireRate = new gcn::DropDown(&autoFireRateList); + cboAutofireRate->setSize(80, cboAutofireRate->getHeight()); + cboAutofireRate->setBaseColor(gui_baseCol); + cboAutofireRate->setBackgroundColor(colTextboxBackground); + cboAutofireRate->setId("cboAutofireRate"); + cboAutofireRate->addActionListener(inputActionListener); lblMouseSpeed = new gcn::Label("Mouse Speed:"); lblMouseSpeed->setAlignment(gcn::Graphics::RIGHT); @@ -382,22 +411,37 @@ void InitPanelInput(const struct _ConfigCategory& category) auto posY = DISTANCE_BORDER; category.panel->add(lblPort0, DISTANCE_BORDER, posY); category.panel->add(cboPort0, DISTANCE_BORDER + lblPort0->getWidth() + 8, posY); - category.panel->add(cboPort0mode, cboPort0->getX() + cboPort0->getWidth() + DISTANCE_NEXT_X, posY); posY += cboPort0->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(cboPort0Autofire, cboPort0->getX(), posY); + category.panel->add(cboPort0mode, cboPort0Autofire->getX() + cboPort0Autofire->getWidth() + DISTANCE_NEXT_X, posY); + posY += cboPort0Autofire->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(lblPort1, DISTANCE_BORDER, posY); category.panel->add(cboPort1, DISTANCE_BORDER + lblPort1->getWidth() + 8, posY); - category.panel->add(cboPort1mode, cboPort1->getX() + cboPort1->getWidth() + DISTANCE_NEXT_X, posY); posY += cboPort1->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(cboPort1Autofire, cboPort1->getX(), posY); + category.panel->add(cboPort1mode, cboPort1Autofire->getX() + cboPort1Autofire->getWidth() + DISTANCE_NEXT_X, posY); + posY += cboPort1Autofire->getHeight() + DISTANCE_NEXT_Y * 2; + + category.panel->add(lblParallelPortAdapter, DISTANCE_BORDER, posY); + posY += lblParallelPortAdapter->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(lblPort2, DISTANCE_BORDER, posY); category.panel->add(cboPort2, DISTANCE_BORDER + lblPort2->getWidth() + 8, posY); posY += cboPort2->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(cboPort2Autofire, cboPort2->getX(), posY); + posY += cboPort2Autofire->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(lblPort3, DISTANCE_BORDER, posY); category.panel->add(cboPort3, DISTANCE_BORDER + lblPort3->getWidth() + 8, posY); - posY += cboPort3->getHeight() + DISTANCE_NEXT_Y * 2; + posY += cboPort3->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(cboPort3Autofire, cboPort3->getX(), posY); + posY += cboPort3Autofire->getHeight() + DISTANCE_NEXT_Y * 2; + category.panel->add(lblPort0mousemode, DISTANCE_BORDER, posY); category.panel->add(cboPort0mousemode, lblPort0mousemode->getX() + lblPort0mousemode->getWidth() + 8, posY); @@ -411,9 +455,9 @@ void InitPanelInput(const struct _ConfigCategory& category) category.panel->add(cboPort1mousemode, lblPort1mousemode->getX() + lblPort1mousemode->getWidth() + 8, posY); posY += lblPort1mousemode->getHeight() + DISTANCE_NEXT_Y * 2; - category.panel->add(lblAutofire, DISTANCE_BORDER, posY); - category.panel->add(cboAutofire, DISTANCE_BORDER + lblAutofire->getWidth() + 8, posY); - category.panel->add(chkMouseHack, cboAutofire->getX() + cboAutofire->getWidth() + DISTANCE_NEXT_X, posY); + category.panel->add(lblAutofireRate, DISTANCE_BORDER, posY); + category.panel->add(cboAutofireRate, DISTANCE_BORDER + lblAutofireRate->getWidth() + 8, posY); + category.panel->add(chkMouseHack, cboAutofireRate->getX() + cboAutofireRate->getWidth() + DISTANCE_NEXT_X, posY); posY += chkMouseHack->getHeight() + DISTANCE_NEXT_Y; RefreshPanelInput(); @@ -424,24 +468,30 @@ void ExitPanelInput() { delete lblPort0; delete cboPort0; + delete cboPort0Autofire; delete cboPort0mode; delete lblPort0mousemode; delete cboPort0mousemode; delete lblPort1; delete cboPort1; + delete cboPort1Autofire; delete cboPort1mode; delete lblPort1mousemode; delete cboPort1mousemode; + delete lblParallelPortAdapter; delete lblPort2; delete cboPort2; + delete cboPort2Autofire; + delete lblPort3; delete cboPort3; - - delete lblAutofire; - delete cboAutofire; + delete cboPort3Autofire; + + delete lblAutofireRate; + delete cboAutofireRate; delete lblMouseSpeed; delete sldMouseSpeed; delete lblMouseSpeedInfo; @@ -503,33 +553,21 @@ void RefreshPanelInput() cboPort3->setSelected(idx); if (changed_prefs.input_autofire_linecnt == 0) - cboAutofire->setSelected(0); + cboAutofireRate->setSelected(0); else if (changed_prefs.input_autofire_linecnt > 10 * 312) - cboAutofire->setSelected(1); + cboAutofireRate->setSelected(1); else if (changed_prefs.input_autofire_linecnt > 6 * 312) - cboAutofire->setSelected(2); + cboAutofireRate->setSelected(2); else - cboAutofire->setSelected(3); + cboAutofireRate->setSelected(3); - - if (changed_prefs.jports[0].mode == JSEM_MODE_MOUSE) - cboPort0mode->setSelected(0); - else if (changed_prefs.jports[0].mode == JSEM_MODE_JOYSTICK) - cboPort0mode->setSelected(1); - else if (changed_prefs.jports[0].mode == JSEM_MODE_JOYSTICK_CD32) - cboPort0mode->setSelected(2); - else - cboPort0mode->setSelected(3); - - - if (changed_prefs.jports[1].mode == JSEM_MODE_MOUSE) - cboPort1mode->setSelected(0); - else if (changed_prefs.jports[1].mode == JSEM_MODE_JOYSTICK) - cboPort1mode->setSelected(1); - else if (changed_prefs.jports[1].mode == JSEM_MODE_JOYSTICK_CD32) - cboPort1mode->setSelected(2); - else - cboPort1mode->setSelected(3); + cboPort0mode->setSelected(changed_prefs.jports[0].mode); + cboPort1mode->setSelected(changed_prefs.jports[1].mode); + + cboPort0Autofire->setSelected(changed_prefs.jports[0].autofire); + cboPort1Autofire->setSelected(changed_prefs.jports[1].autofire); + cboPort2Autofire->setSelected(changed_prefs.jports[2].autofire); + cboPort3Autofire->setSelected(changed_prefs.jports[3].autofire); // changed mouse map cboPort0mousemode->setSelected(changed_prefs.jports[0].mousemap); @@ -582,7 +620,5 @@ bool HelpPanelInput(std::vector& helptext) helptext.emplace_back("the mouse pointer to the exact position. This works very well on Workbench, "); helptext.emplace_back("but many games using their own mouse handling and will not profit from this mode."); helptext.emplace_back(" "); - helptext.emplace_back("\"Tap Delay\" specifies the time between taping the screen and an emulated "); - helptext.emplace_back("mouse button click."); return true; } diff --git a/src/osdep/gui/PanelQuickstart.cpp b/src/osdep/gui/PanelQuickstart.cpp index f3aa3c37..20e0c83c 100644 --- a/src/osdep/gui/PanelQuickstart.cpp +++ b/src/osdep/gui/PanelQuickstart.cpp @@ -809,7 +809,7 @@ void InitPanelQuickstart(const struct _ConfigCategory& category) cmdDFxEject[i]->addActionListener(dfxButtonActionListener); cmdDFxSelect[i] = new gcn::Button("Select file"); - cmdDFxSelect[i]->setSize(BUTTON_WIDTH + 8, SMALL_BUTTON_HEIGHT); + cmdDFxSelect[i]->setSize(BUTTON_WIDTH + 10, SMALL_BUTTON_HEIGHT); cmdDFxSelect[i]->setBaseColor(gui_baseCol); snprintf(tmp, 20, "qscmdSel%d", i); cmdDFxSelect[i]->setId(tmp); @@ -887,16 +887,12 @@ void InitPanelQuickstart(const struct _ConfigCategory& category) for (auto i = 0; i < 2; ++i) { - auto posX = DISTANCE_BORDER; - category.panel->add(chkDFx[i], posX, posY); - posX += DISTANCE_NEXT_X * 12; - category.panel->add(chkDFxWriteProtect[i], posX, posY); - posX += DISTANCE_NEXT_X * 13; + category.panel->add(chkDFx[i], DISTANCE_BORDER, posY); + category.panel->add(chkDFxWriteProtect[i], DISTANCE_BORDER + DISTANCE_NEXT_X * 8, posY); // category.panel->add(cmdDFxInfo[i], posX, posY); //posX += cmdDFxInfo[i]->getWidth() + DISTANCE_NEXT_X; - category.panel->add(cmdDFxEject[i], posX, posY); - posX += cmdDFxEject[i]->getWidth() + DISTANCE_NEXT_X; - category.panel->add(cmdDFxSelect[i], posX, posY); + category.panel->add(cmdDFxEject[i], DISTANCE_BORDER + DISTANCE_NEXT_X * 26, posY); + category.panel->add(cmdDFxSelect[i], cmdDFxEject[i]->getX() + cmdDFxEject[i]->getWidth() + DISTANCE_NEXT_X, posY); posY += cmdDFxEject[i]->getHeight() + 8; category.panel->add(cboDFxFile[i], DISTANCE_BORDER, posY); diff --git a/src/osdep/gui/PanelRAM.cpp b/src/osdep/gui/PanelRAM.cpp index a8b3fed7..6120632d 100644 --- a/src/osdep/gui/PanelRAM.cpp +++ b/src/osdep/gui/PanelRAM.cpp @@ -197,44 +197,44 @@ void InitPanelRAM(const struct _ConfigCategory& category) grpRAM->setPosition(DISTANCE_BORDER, DISTANCE_BORDER); int posY = 10; - grpRAM->add(lblChipmem, 8, posY); + grpRAM->add(lblChipmem, 10, posY); grpRAM->add(sldChipmem, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y, posY); grpRAM->add(lblChipsize, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y + sldChipmem->getWidth() + 12, posY); posY += sldChipmem->getHeight() + DISTANCE_NEXT_Y; - grpRAM->add(lblSlowmem, 8, posY); + grpRAM->add(lblSlowmem, 10, posY); grpRAM->add(sldSlowmem, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y, posY); grpRAM->add(lblSlowsize, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y + sldSlowmem->getWidth() + 12, posY); posY += sldSlowmem->getHeight() + DISTANCE_NEXT_Y; - grpRAM->add(lblFastmem, 8, posY); + grpRAM->add(lblFastmem, 10, posY); grpRAM->add(sldFastmem, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y, posY); grpRAM->add(lblFastsize, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y + sldFastmem->getWidth() + 12, posY); posY += sldFastmem->getHeight() + DISTANCE_NEXT_Y; - grpRAM->add(lblZ3mem, 8, posY); + grpRAM->add(lblZ3mem, 10, posY); grpRAM->add(sldZ3mem, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y, posY); grpRAM->add(lblZ3size, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y + sldZ3mem->getWidth() + 12, posY); posY += sldZ3mem->getHeight() + DISTANCE_NEXT_Y; - grpRAM->add(lblGfxmem, 8, posY); + grpRAM->add(lblGfxmem, 10, posY); grpRAM->add(sldGfxmem, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y, posY); grpRAM->add(lblGfxsize, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y + sldGfxmem->getWidth() + 12, posY); posY += sldGfxmem->getHeight() + DISTANCE_NEXT_Y; - grpRAM->add(lblA3000Lowmem, 8, posY); + grpRAM->add(lblA3000Lowmem, 10, posY); grpRAM->add(sldA3000Lowmem, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y, posY); grpRAM->add(lblA3000Lowsize, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y + sldA3000Lowmem->getWidth() + 12, posY); posY += sldA3000Lowmem->getHeight() + DISTANCE_NEXT_Y; - grpRAM->add(lblA3000Highmem, 8, posY); + grpRAM->add(lblA3000Highmem, 10, posY); grpRAM->add(sldA3000Highmem, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y, posY); grpRAM->add(lblA3000Highsize, lblA3000Lowmem->getWidth() + DISTANCE_NEXT_Y + sldA3000Highmem->getWidth() + 12, posY); posY += sldA3000Highmem->getHeight() + DISTANCE_NEXT_Y; grpRAM->setMovable(false); - grpRAM->setSize(400, posY + DISTANCE_BORDER * 2); + grpRAM->setSize(375, posY + DISTANCE_BORDER * 2); grpRAM->setTitleBarHeight(TITLEBAR_HEIGHT); grpRAM->setBaseColor(gui_baseCol); diff --git a/src/osdep/gui/PanelSound.cpp b/src/osdep/gui/PanelSound.cpp index 918405b8..a03cf00d 100644 --- a/src/osdep/gui/PanelSound.cpp +++ b/src/osdep/gui/PanelSound.cpp @@ -17,9 +17,9 @@ static gcn::RadioButton* optSoundDisabled; static gcn::RadioButton* optSoundDisabledEmu; static gcn::RadioButton* optSoundEmulated; static gcn::RadioButton* optSoundEmulatedBest; -static gcn::Window* grpMode; -static gcn::RadioButton* optMono; -static gcn::RadioButton* optStereo; +static gcn::Window* grpSettings; +static gcn::Label* lblChannelMode; +static gcn::DropDown* cboChannelMode; static gcn::Label* lblFrequency; static gcn::DropDown* cboFrequency; static gcn::Label* lblInterpolation; @@ -27,11 +27,10 @@ static gcn::DropDown* cboInterpolation; static gcn::Label* lblFilter; static gcn::DropDown* cboFilter; static gcn::Label* lblSeparation; -static gcn::Label* lblSeparationInfo; -static gcn::Slider* sldSeparation; +static gcn::DropDown* cboSeparation; static gcn::Label* lblStereoDelay; -static gcn::Label* lblStereoDelayInfo; -static gcn::Slider* sldStereoDelay; +static gcn::DropDown* cboStereoDelay; +static gcn::Window* grpVolume; static gcn::Label* lblPaulaVol; static gcn::Label* lblPaulaVolInfo; static gcn::Slider* sldPaulaVol; @@ -40,6 +39,102 @@ static int curr_separation_idx; static int curr_stereodelay_idx; +class ChannelModeListModel : public gcn::ListModel +{ + std::vector mode; + +public: + ChannelModeListModel() + { + mode.emplace_back("Mono"); + mode.emplace_back("Stereo"); + } + + int getNumberOfElements() override + { + return mode.size(); + } + + std::string getElementAt(int i) override + { + if (i < 0 || i >= static_cast(mode.size())) + return "---"; + return mode[i]; + } +}; + +static ChannelModeListModel channelModeList; + +class SeparationListModel : public gcn::ListModel +{ + std::vector mode; + +public: + SeparationListModel() + { + mode.emplace_back("100%"); + mode.emplace_back("90%"); + mode.emplace_back("80%"); + mode.emplace_back("70%"); + mode.emplace_back("60%"); + mode.emplace_back("50%"); + mode.emplace_back("40%"); + mode.emplace_back("30%"); + mode.emplace_back("20%"); + mode.emplace_back("10%"); + mode.emplace_back("0%"); + } + + int getNumberOfElements() override + { + return mode.size(); + } + + std::string getElementAt(int i) override + { + if (i < 0 || i >= static_cast(mode.size())) + return "---"; + return mode[i]; + } +}; + +static SeparationListModel separationList; + +class StereoDelayListModel : public gcn::ListModel +{ + std::vector mode; + +public: + StereoDelayListModel() + { + mode.emplace_back("-"); + mode.emplace_back("1"); + mode.emplace_back("2"); + mode.emplace_back("3"); + mode.emplace_back("4"); + mode.emplace_back("5"); + mode.emplace_back("6"); + mode.emplace_back("7"); + mode.emplace_back("8"); + mode.emplace_back("9"); + mode.emplace_back("10"); + } + + int getNumberOfElements() override + { + return mode.size(); + } + + std::string getElementAt(int i) override + { + if (i < 0 || i >= static_cast(mode.size())) + return "---"; + return mode[i]; + } +}; + +static StereoDelayListModel stereoDelayList; + class FrequencyListModel : public gcn::ListModel { std::vector freq; @@ -143,10 +238,8 @@ public: else if (actionEvent.getSource() == optSoundEmulatedBest) changed_prefs.produce_sound = 3; - else if (actionEvent.getSource() == optMono) - changed_prefs.sound_stereo = 0; - else if (actionEvent.getSource() == optStereo) - changed_prefs.sound_stereo = 1; + else if (actionEvent.getSource() == cboChannelMode) + changed_prefs.sound_stereo = cboChannelMode->getSelected(); else if (actionEvent.getSource() == cboFrequency) { @@ -200,22 +293,22 @@ public: } } - else if (actionEvent.getSource() == sldSeparation) + else if (actionEvent.getSource() == cboSeparation) { - if (curr_separation_idx != static_cast(sldSeparation->getValue()) + if (curr_separation_idx != static_cast(cboSeparation->getSelected()) && changed_prefs.sound_stereo > 0) { - curr_separation_idx = static_cast(sldSeparation->getValue()); + curr_separation_idx = static_cast(cboSeparation->getSelected()); changed_prefs.sound_stereo_separation = 10 - curr_separation_idx; } } - else if (actionEvent.getSource() == sldStereoDelay) + else if (actionEvent.getSource() == cboStereoDelay) { - if (curr_stereodelay_idx != static_cast(sldStereoDelay->getValue()) + if (curr_stereodelay_idx != static_cast(cboStereoDelay->getSelected()) && changed_prefs.sound_stereo > 0) { - curr_stereodelay_idx = static_cast(sldStereoDelay->getValue()); + curr_stereodelay_idx = static_cast(cboStereoDelay->getSelected()); if (curr_stereodelay_idx > 0) changed_prefs.sound_mixed_stereo_delay = curr_stereodelay_idx; else @@ -256,45 +349,28 @@ void InitPanelSound(const struct _ConfigCategory& category) optSoundEmulatedBest->setId("sndEmuBest"); optSoundEmulatedBest->addActionListener(soundActionListener); - grpSound = new gcn::Window("Sound Emulation"); - grpSound->add(optSoundDisabled, 5, 10); - grpSound->add(optSoundDisabledEmu, 5, 40); - grpSound->add(optSoundEmulated, 5, 70); - grpSound->add(optSoundEmulatedBest, 5, 100); - grpSound->setMovable(false); - grpSound->setSize(optSoundEmulatedBest->getWidth() + DISTANCE_BORDER, 150); - grpSound->setTitleBarHeight(TITLEBAR_HEIGHT); - grpSound->setBaseColor(gui_baseCol); - lblFrequency = new gcn::Label("Frequency:"); lblFrequency->setAlignment(gcn::Graphics::RIGHT); cboFrequency = new gcn::DropDown(&frequencyTypeList); - cboFrequency->setSize(160, cboFrequency->getHeight()); + cboFrequency->setSize(100, cboFrequency->getHeight()); cboFrequency->setBaseColor(gui_baseCol); cboFrequency->setBackgroundColor(colTextboxBackground); cboFrequency->setId("cboFrequency"); cboFrequency->addActionListener(soundActionListener); - optMono = new gcn::RadioButton("Mono", "radiosoundmodegroup"); - optMono->setId("Mono"); - optMono->addActionListener(soundActionListener); - - optStereo = new gcn::RadioButton("Stereo", "radiosoundmodegroup"); - optStereo->setId("Stereo"); - optStereo->addActionListener(soundActionListener); - - grpMode = new gcn::Window("Mode"); - grpMode->add(optMono, 5, 10); - grpMode->add(optStereo, 5, 40); - grpMode->setMovable(false); - grpMode->setSize(90, 90); - grpMode->setTitleBarHeight(TITLEBAR_HEIGHT); - grpMode->setBaseColor(gui_baseCol); - + lblChannelMode = new gcn::Label("Channel mode:"); + lblChannelMode->setAlignment(gcn::Graphics::RIGHT); + cboChannelMode = new gcn::DropDown(&channelModeList); + cboChannelMode->setSize(100, cboChannelMode->getHeight()); + cboChannelMode->setBaseColor(gui_baseCol); + cboChannelMode->setBackgroundColor(colTextboxBackground); + cboChannelMode->setId("cboChannelMode"); + cboChannelMode->addActionListener(soundActionListener); + lblInterpolation = new gcn::Label("Interpolation:"); lblInterpolation->setAlignment(gcn::Graphics::RIGHT); cboInterpolation = new gcn::DropDown(&interpolationTypeList); - cboInterpolation->setSize(160, cboInterpolation->getHeight()); + cboInterpolation->setSize(150, cboInterpolation->getHeight()); cboInterpolation->setBaseColor(gui_baseCol); cboInterpolation->setBackgroundColor(colTextboxBackground); cboInterpolation->setId("cboInterpol"); @@ -303,7 +379,7 @@ void InitPanelSound(const struct _ConfigCategory& category) lblFilter = new gcn::Label("Filter:"); lblFilter->setAlignment(gcn::Graphics::RIGHT); cboFilter = new gcn::DropDown(&filterTypeList); - cboFilter->setSize(160, cboFilter->getHeight()); + cboFilter->setSize(150, cboFilter->getHeight()); cboFilter->setBaseColor(gui_baseCol); cboFilter->setBackgroundColor(colTextboxBackground); cboFilter->setId("cboFilter"); @@ -311,64 +387,75 @@ void InitPanelSound(const struct _ConfigCategory& category) lblSeparation = new gcn::Label("Stereo separation:"); lblSeparation->setAlignment(gcn::Graphics::RIGHT); - sldSeparation = new gcn::Slider(0, 10); - sldSeparation->setSize(160, SLIDER_HEIGHT); - sldSeparation->setBaseColor(gui_baseCol); - sldSeparation->setMarkerLength(20); - sldSeparation->setStepLength(1); - sldSeparation->setId("sldSeparation"); - sldSeparation->addActionListener(soundActionListener); - lblSeparationInfo = new gcn::Label("100%"); - + cboSeparation = new gcn::DropDown(&separationList); + cboSeparation->setSize(150, cboSeparation->getHeight()); + cboSeparation->setBaseColor(gui_baseCol); + cboSeparation->setBackgroundColor(colTextboxBackground); + cboSeparation->setId("cboSeparation"); + cboSeparation->addActionListener(soundActionListener); + lblStereoDelay = new gcn::Label("Stereo delay:"); lblStereoDelay->setAlignment(gcn::Graphics::RIGHT); - sldStereoDelay = new gcn::Slider(0, 10); - sldStereoDelay->setSize(160, SLIDER_HEIGHT); - sldStereoDelay->setBaseColor(gui_baseCol); - sldStereoDelay->setMarkerLength(20); - sldStereoDelay->setStepLength(1); - sldStereoDelay->setId("sldStereoDelay"); - sldStereoDelay->addActionListener(soundActionListener); - lblStereoDelayInfo = new gcn::Label("10"); + cboStereoDelay = new gcn::DropDown(&stereoDelayList); + cboStereoDelay->setSize(150, cboStereoDelay->getHeight()); + cboStereoDelay->setBaseColor(gui_baseCol); + cboStereoDelay->setBackgroundColor(colTextboxBackground); + cboStereoDelay->setId("cboSeparation"); + cboStereoDelay->addActionListener(soundActionListener); lblPaulaVol = new gcn::Label("Paula Volume:"); lblPaulaVol->setAlignment(gcn::Graphics::RIGHT); sldPaulaVol = new gcn::Slider(0, 100); - sldPaulaVol->setSize(160, SLIDER_HEIGHT); + sldPaulaVol->setSize(150, SLIDER_HEIGHT); sldPaulaVol->setBaseColor(gui_baseCol); sldPaulaVol->setMarkerLength(20); sldPaulaVol->setStepLength(10); sldPaulaVol->setId("sldPaulaVol"); sldPaulaVol->addActionListener(soundActionListener); - lblPaulaVolInfo = new gcn::Label("80 %"); + lblPaulaVolInfo = new gcn::Label("100 %"); + grpSound = new gcn::Window("Sound Emulation"); + grpSound->add(optSoundDisabled, 10, 10); + grpSound->add(optSoundDisabledEmu, 10, 40); + grpSound->add(optSoundEmulated, 10, 70); + grpSound->add(optSoundEmulatedBest, 10, 100); + grpSound->setMovable(false); + grpSound->setSize(optSoundEmulatedBest->getWidth() + DISTANCE_BORDER + 10, 160); + grpSound->setTitleBarHeight(TITLEBAR_HEIGHT); + grpSound->setBaseColor(gui_baseCol); + + grpVolume = new gcn::Window("Volume"); + grpVolume->add(lblPaulaVol, 10, 10); + grpVolume->add(sldPaulaVol, lblPaulaVol->getX() + lblPaulaVol->getWidth() + 10, lblPaulaVol->getY()); + grpVolume->add(lblPaulaVolInfo, sldPaulaVol->getX() + sldPaulaVol->getWidth() + 10, sldPaulaVol->getY()); + grpVolume->setMovable(false); + grpVolume->setSize(category.panel->getWidth() - DISTANCE_BORDER * 2 - grpSound->getWidth() - DISTANCE_NEXT_X, grpSound->getHeight()); + grpVolume->setTitleBarHeight(TITLEBAR_HEIGHT); + grpVolume->setBaseColor(gui_baseCol); + + grpSettings = new gcn::Window("Settings"); + grpSettings->add(lblChannelMode, 10, 10); + grpSettings->add(cboChannelMode, 10, lblChannelMode->getY() + lblChannelMode->getHeight() + 10); + grpSettings->add(lblFrequency, 10, 70); + grpSettings->add(cboFrequency, 10, lblFrequency->getY() + lblFrequency->getHeight() + 10); + grpSettings->add(lblSeparation, cboChannelMode->getX() + cboChannelMode->getWidth() + DISTANCE_NEXT_X * 3, 10); + grpSettings->add(cboSeparation, lblSeparation->getX(), lblSeparation->getY() + lblSeparation->getHeight() + 10); + grpSettings->add(lblStereoDelay, cboSeparation->getX(), lblFrequency->getY()); + grpSettings->add(cboStereoDelay, lblStereoDelay->getX(), cboFrequency->getY()); + grpSettings->add(lblInterpolation, cboSeparation->getX() + cboSeparation->getWidth() + DISTANCE_NEXT_X * 3, 10); + grpSettings->add(cboInterpolation, lblInterpolation->getX(), lblInterpolation->getY() + lblInterpolation->getHeight() + 10); + grpSettings->add(lblFilter, lblInterpolation->getX(), lblFrequency->getY()); + grpSettings->add(cboFilter, cboInterpolation->getX(), cboFrequency->getY()); + grpSettings->setMovable(false); + grpSettings->setSize(category.panel->getWidth() - DISTANCE_BORDER * 2, category.panel->getHeight() - grpSound->getHeight() -DISTANCE_NEXT_Y * 3); + grpSettings->setTitleBarHeight(TITLEBAR_HEIGHT); + grpSettings->setBaseColor(gui_baseCol); + auto posY = DISTANCE_BORDER; category.panel->add(grpSound, DISTANCE_BORDER, posY); - category.panel->add(grpMode, grpSound->getX() + grpSound->getWidth() + DISTANCE_NEXT_X, posY); + category.panel->add(grpVolume, grpSound->getX() + grpSound->getWidth() + DISTANCE_NEXT_X, posY); posY += grpSound->getHeight() + DISTANCE_NEXT_Y; - category.panel->add(lblFrequency, DISTANCE_BORDER, posY); - category.panel->add(cboFrequency, lblFrequency->getX() + lblFrequency->getWidth() + DISTANCE_NEXT_X, posY); - posY += cboFrequency->getHeight() + DISTANCE_NEXT_Y; - category.panel->add(lblInterpolation, DISTANCE_BORDER, posY); - category.panel->add(cboInterpolation, lblInterpolation->getX() + lblInterpolation->getWidth() + DISTANCE_NEXT_X, - posY); - posY += cboInterpolation->getHeight() + DISTANCE_NEXT_Y; - category.panel->add(lblFilter, DISTANCE_BORDER, posY); - category.panel->add(cboFilter, lblFilter->getX() + lblFilter->getWidth() + DISTANCE_NEXT_X, posY); - posY += cboFilter->getHeight() + DISTANCE_NEXT_Y; - category.panel->add(lblSeparation, DISTANCE_BORDER, posY); - category.panel->add(sldSeparation, lblSeparation->getX() + lblSeparation->getWidth() + DISTANCE_NEXT_X, posY); - category.panel->add(lblSeparationInfo, sldSeparation->getX() + sldSeparation->getWidth() + DISTANCE_NEXT_X, posY); - posY += SLIDER_HEIGHT + DISTANCE_NEXT_Y; - category.panel->add(lblStereoDelay, DISTANCE_BORDER, posY); - category.panel->add(sldStereoDelay, lblStereoDelay->getX() + lblStereoDelay->getWidth() + DISTANCE_NEXT_X, posY); - category.panel->add(lblStereoDelayInfo, sldStereoDelay->getX() + sldStereoDelay->getWidth() + DISTANCE_NEXT_X, - posY); - posY += SLIDER_HEIGHT + DISTANCE_NEXT_Y; - category.panel->add(lblPaulaVol, DISTANCE_BORDER, posY); - category.panel->add(sldPaulaVol, lblPaulaVol->getX() + lblPaulaVol->getWidth() + DISTANCE_NEXT_X, posY); - category.panel->add(lblPaulaVolInfo, sldPaulaVol->getX() + sldPaulaVol->getWidth() + DISTANCE_NEXT_X, posY); - posY += SLIDER_HEIGHT + DISTANCE_NEXT_Y; + category.panel->add(grpSettings, DISTANCE_BORDER, posY); RefreshPanelSound(); } @@ -381,9 +468,10 @@ void ExitPanelSound() delete optSoundEmulated; delete optSoundEmulatedBest; delete grpSound; - delete optMono; - delete optStereo; - delete grpMode; + delete grpVolume; + delete lblChannelMode; + delete cboChannelMode; + delete grpSettings; delete lblFrequency; delete cboFrequency; delete lblInterpolation; @@ -391,11 +479,9 @@ void ExitPanelSound() delete lblFilter; delete cboFilter; delete lblSeparation; - delete sldSeparation; - delete lblSeparationInfo; + delete cboSeparation; delete lblStereoDelay; - delete sldStereoDelay; - delete lblStereoDelayInfo; + delete cboStereoDelay; delete soundActionListener; } @@ -422,11 +508,8 @@ void RefreshPanelSound() break; } - if (changed_prefs.sound_stereo == 0) - optMono->setSelected(true); - else if (changed_prefs.sound_stereo == 1) - optStereo->setSelected(true); - + cboChannelMode->setSelected(changed_prefs.sound_stereo); + switch (changed_prefs.sound_freq) { case 11025: @@ -473,26 +556,17 @@ void RefreshPanelSound() curr_stereodelay_idx = changed_prefs.sound_mixed_stereo_delay > 0 ? changed_prefs.sound_mixed_stereo_delay : 0; } - sldSeparation->setValue(curr_separation_idx); - sldSeparation->setEnabled(changed_prefs.sound_stereo >= 1); - snprintf(tmp, 10, "%d%%", 100 - 10 * curr_separation_idx); - lblSeparationInfo->setCaption(tmp); + cboSeparation->setSelected(curr_separation_idx); + cboSeparation->setEnabled(changed_prefs.sound_stereo >= 1); + + cboStereoDelay->setSelected(curr_stereodelay_idx); + cboStereoDelay->setEnabled(changed_prefs.sound_stereo >= 1); - sldStereoDelay->setValue(curr_stereodelay_idx); - sldStereoDelay->setEnabled(changed_prefs.sound_stereo >= 1); - if (curr_stereodelay_idx <= 0) - lblStereoDelayInfo->setCaption("-"); - else - { - snprintf(tmp, 10, "%d", curr_stereodelay_idx); - lblStereoDelayInfo->setCaption(tmp); - } sldPaulaVol->setValue(100 - changed_prefs.sound_volume_paula); snprintf(tmp, sizeof tmp - 1, "%d %%", 100 - changed_prefs.sound_volume_paula); lblPaulaVolInfo->setCaption(tmp); - optMono->setEnabled(changed_prefs.produce_sound > 0); - optStereo->setEnabled(changed_prefs.produce_sound > 0); + cboChannelMode->setEnabled(changed_prefs.produce_sound > 0); lblFrequency->setEnabled(changed_prefs.produce_sound > 0); cboFrequency->setEnabled(changed_prefs.produce_sound > 0); lblInterpolation->setEnabled(changed_prefs.produce_sound > 0); @@ -500,11 +574,9 @@ void RefreshPanelSound() lblFilter->setEnabled(changed_prefs.produce_sound > 0); cboFilter->setEnabled(changed_prefs.produce_sound > 0); lblSeparation->setEnabled(changed_prefs.produce_sound > 0); - lblSeparationInfo->setEnabled(changed_prefs.produce_sound > 0); - sldSeparation->setEnabled(changed_prefs.produce_sound > 0); + cboSeparation->setEnabled(changed_prefs.produce_sound > 0); lblStereoDelay->setEnabled(changed_prefs.produce_sound > 0); - lblStereoDelayInfo->setEnabled(changed_prefs.produce_sound > 0); - sldStereoDelay->setEnabled(changed_prefs.produce_sound > 0); + cboStereoDelay->setEnabled(changed_prefs.produce_sound > 0); lblPaulaVol->setEnabled(changed_prefs.produce_sound > 0); lblPaulaVolInfo->setEnabled(changed_prefs.produce_sound > 0); sldPaulaVol->setEnabled(changed_prefs.produce_sound > 0);