GUI refactoring and improvements

This commit is contained in:
Dimitris Panokostas 2020-07-13 21:55:31 +02:00
parent 01fa60c141
commit 850399d5c8
13 changed files with 424 additions and 331 deletions

View file

@ -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;

View file

@ -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();
}

View file

@ -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"},

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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<std::string>& 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;
}

View file

@ -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);

View file

@ -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);

View file

@ -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<std::string> 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<int>(mode.size()))
return "---";
return mode[i];
}
};
static ChannelModeListModel channelModeList;
class SeparationListModel : public gcn::ListModel
{
std::vector<std::string> 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<int>(mode.size()))
return "---";
return mode[i];
}
};
static SeparationListModel separationList;
class StereoDelayListModel : public gcn::ListModel
{
std::vector<std::string> 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<int>(mode.size()))
return "---";
return mode[i];
}
};
static StereoDelayListModel stereoDelayList;
class FrequencyListModel : public gcn::ListModel
{
std::vector<std::string> 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<int>(sldSeparation->getValue())
if (curr_separation_idx != static_cast<int>(cboSeparation->getSelected())
&& changed_prefs.sound_stereo > 0)
{
curr_separation_idx = static_cast<int>(sldSeparation->getValue());
curr_separation_idx = static_cast<int>(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<int>(sldStereoDelay->getValue())
if (curr_stereodelay_idx != static_cast<int>(cboStereoDelay->getSelected())
&& changed_prefs.sound_stereo > 0)
{
curr_stereodelay_idx = static_cast<int>(sldStereoDelay->getValue());
curr_stereodelay_idx = static_cast<int>(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);