2008-12-08 05:25:12 +00:00
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Project description
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2009-01-15 06:48:15 +00:00
|
|
|
|
// Name: nJoy
|
2008-12-08 05:25:12 +00:00
|
|
|
|
// Description: A Dolphin Compatible Input Plugin
|
|
|
|
|
//
|
|
|
|
|
// Author: Falcon4ever (nJoy@falcon4ever.com)
|
|
|
|
|
// Site: www.multigesture.net
|
|
|
|
|
// Copyright (C) 2003-2008 Dolphin Project.
|
|
|
|
|
//
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//
|
|
|
|
|
// Licensetype: GNU General Public License (GPL)
|
|
|
|
|
//
|
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
|
// the Free Software Foundation, version 2.0.
|
|
|
|
|
//
|
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
// GNU General Public License 2.0 for more details.
|
|
|
|
|
//
|
|
|
|
|
// A copy of the GPL 2.0 should have been included with the program.
|
|
|
|
|
// If not, see http://www.gnu.org/licenses/
|
|
|
|
|
//
|
|
|
|
|
// Official SVN repository and contact information can be found at
|
|
|
|
|
// http://code.google.com/p/dolphin-emu/
|
|
|
|
|
//
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Include
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2008-12-27 11:32:03 +00:00
|
|
|
|
#include "math.h" // System
|
|
|
|
|
|
|
|
|
|
#include "ConfigBox.h" // Local
|
2008-12-08 05:25:12 +00:00
|
|
|
|
#include "../nJoy.h"
|
|
|
|
|
#include "Images/controller.xpm"
|
|
|
|
|
|
2009-02-10 14:02:01 +00:00
|
|
|
|
extern bool g_EmulatorRunning;
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
// D-Pad type
|
2009-01-19 17:47:00 +00:00
|
|
|
|
static const char* DPadType[] =
|
2008-12-08 05:25:12 +00:00
|
|
|
|
{
|
2009-01-19 17:47:00 +00:00
|
|
|
|
"Hat",
|
|
|
|
|
"Custom",
|
2008-12-08 05:25:12 +00:00
|
|
|
|
};
|
2009-01-20 05:28:30 +00:00
|
|
|
|
|
|
|
|
|
// Trigger type
|
|
|
|
|
static const char* TriggerType[] =
|
|
|
|
|
{
|
2009-01-20 14:28:45 +00:00
|
|
|
|
"SDL", // -0x8000 to 0x7fff
|
2009-01-20 14:32:15 +00:00
|
|
|
|
"XInput", // 0x00 to 0xff
|
2009-01-20 05:28:30 +00:00
|
|
|
|
};
|
2008-12-26 02:42:15 +00:00
|
|
|
|
////////////////////////
|
|
|
|
|
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// The wxWidgets class
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2008-12-08 05:25:12 +00:00
|
|
|
|
BEGIN_EVENT_TABLE(ConfigBox,wxDialog)
|
|
|
|
|
EVT_CLOSE(ConfigBox::OnClose)
|
|
|
|
|
EVT_BUTTON(ID_ABOUT, ConfigBox::AboutClick)
|
|
|
|
|
EVT_BUTTON(ID_OK, ConfigBox::OKClick)
|
|
|
|
|
EVT_BUTTON(ID_CANCEL, ConfigBox::CancelClick)
|
2009-01-20 05:28:30 +00:00
|
|
|
|
EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, ConfigBox::NotebookPageChanged)
|
|
|
|
|
|
|
|
|
|
// Change and enable or disable gamepad
|
2009-01-21 18:09:31 +00:00
|
|
|
|
EVT_COMBOBOX(IDC_JOYNAME, ConfigBox::ChangeSettings)
|
|
|
|
|
EVT_CHECKBOX(IDC_JOYATTACH, ConfigBox::ChangeSettings)
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Other settings
|
2009-01-20 05:28:30 +00:00
|
|
|
|
EVT_CHECKBOX(IDC_SAVEBYID, ConfigBox::ChangeSettings)
|
2008-12-27 11:32:03 +00:00
|
|
|
|
EVT_CHECKBOX(IDC_SHOWADVANCED, ConfigBox::ChangeSettings)
|
2009-02-10 14:02:01 +00:00
|
|
|
|
EVT_CHECKBOX(IDCB_CHECKFOCUS, ConfigBox::ChangeSettings)
|
2009-01-15 06:48:15 +00:00
|
|
|
|
EVT_COMBOBOX(IDCB_MAINSTICK_DIAGONAL, ConfigBox::ChangeSettings)
|
2009-01-21 18:09:31 +00:00
|
|
|
|
EVT_COMBOBOX(IDC_CONTROLTYPE, ConfigBox::ChangeSettings)
|
|
|
|
|
EVT_COMBOBOX(IDC_TRIGGERTYPE, ConfigBox::ChangeSettings)
|
|
|
|
|
EVT_COMBOBOX(IDC_DEADZONE, ConfigBox::ChangeSettings)
|
|
|
|
|
|
|
|
|
|
// Advanced settings
|
|
|
|
|
EVT_COMBOBOX(IDCB_MAINSTICK_DIAGONAL, ConfigBox::ChangeSettings)
|
2009-01-15 06:48:15 +00:00
|
|
|
|
EVT_CHECKBOX(IDCB_MAINSTICK_S_TO_C, ConfigBox::ChangeSettings)
|
2009-02-10 14:02:01 +00:00
|
|
|
|
EVT_CHECKBOX(IDCB_FILTER_SETTINGS, ConfigBox::ChangeSettings)
|
2009-02-18 23:26:16 +00:00
|
|
|
|
#ifdef RERECORDING
|
|
|
|
|
EVT_CHECKBOX(ID_RECORDING, ConfigBox::ChangeSettings)
|
|
|
|
|
EVT_CHECKBOX(ID_PLAYBACK, ConfigBox::ChangeSettings)
|
|
|
|
|
EVT_BUTTON(ID_SAVE_RECORDING, ConfigBox::GetButtons)
|
|
|
|
|
#endif
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2008-12-08 05:25:12 +00:00
|
|
|
|
EVT_BUTTON(IDB_SHOULDER_L, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_SHOULDER_R, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_BUTTON_A, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_BUTTON_B, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_BUTTON_X, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_BUTTON_Y, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_BUTTON_Z, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_BUTTONSTART, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_BUTTONHALFPRESS, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_DPAD_UP, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_DPAD_DOWN, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_DPAD_LEFT, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_DPAD_RIGHT, ConfigBox::GetButtons)
|
2009-01-19 05:49:25 +00:00
|
|
|
|
EVT_BUTTON(IDB_ANALOG_MAIN_X, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_ANALOG_MAIN_Y, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_ANALOG_SUB_X, ConfigBox::GetButtons)
|
|
|
|
|
EVT_BUTTON(IDB_ANALOG_SUB_Y, ConfigBox::GetButtons)
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
|
|
|
|
#if wxUSE_TIMER
|
2009-01-19 17:47:00 +00:00
|
|
|
|
EVT_TIMER(IDTM_CONSTANT, ConfigBox::OnTimer)
|
|
|
|
|
EVT_TIMER(IDTM_BUTTON, ConfigBox::OnButtonTimer)
|
2008-12-26 02:42:15 +00:00
|
|
|
|
#endif
|
2008-12-08 05:25:12 +00:00
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
ConfigBox::ConfigBox(wxWindow *parent, wxWindowID id, const wxString &title,
|
|
|
|
|
const wxPoint &position, const wxSize& size, long style)
|
|
|
|
|
: wxDialog(parent, id, title, position, size, style)
|
2008-12-08 05:25:12 +00:00
|
|
|
|
{
|
2008-12-28 18:50:24 +00:00
|
|
|
|
// Define values
|
2008-12-08 05:25:12 +00:00
|
|
|
|
notebookpage = 0;
|
2008-12-28 18:50:24 +00:00
|
|
|
|
g_Pressed = 0;
|
2009-01-24 22:17:51 +00:00
|
|
|
|
Debugging = false;
|
2009-01-21 18:09:31 +00:00
|
|
|
|
m_TCDebugging = NULL;
|
|
|
|
|
ControlsCreated = false;
|
2008-12-28 18:50:24 +00:00
|
|
|
|
|
|
|
|
|
// Create controls
|
2008-12-08 05:25:12 +00:00
|
|
|
|
CreateGUIControls();
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
|
|
|
|
#if wxUSE_TIMER
|
2009-01-19 17:47:00 +00:00
|
|
|
|
m_ConstantTimer = new wxTimer(this, IDTM_CONSTANT);
|
|
|
|
|
m_ButtonMappingTimer = new wxTimer(this, IDTM_BUTTON);
|
|
|
|
|
|
|
|
|
|
// Reset values
|
|
|
|
|
GetButtonWaitingID = 0; GetButtonWaitingTimer = 0;
|
|
|
|
|
|
|
|
|
|
// Start the constant timer
|
2009-01-04 21:53:41 +00:00
|
|
|
|
int TimesPerSecond = 30;
|
2009-01-19 17:47:00 +00:00
|
|
|
|
m_ConstantTimer->Start( floor((double)(1000 / TimesPerSecond)) );
|
2008-12-26 02:42:15 +00:00
|
|
|
|
#endif
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-19 17:47:00 +00:00
|
|
|
|
// wxEVT_KEY_DOWN is blocked for enter, tab and the directional keys
|
|
|
|
|
wxTheApp->Connect(wxID_ANY, wxEVT_KEY_UP,
|
2008-12-28 18:50:24 +00:00
|
|
|
|
wxKeyEventHandler(ConfigBox::OnKeyDown),
|
|
|
|
|
(wxObject*)0, this);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ConfigBox::~ConfigBox()
|
|
|
|
|
{
|
2009-01-04 21:53:41 +00:00
|
|
|
|
// The statbar sample has this so I add this to
|
|
|
|
|
#if wxUSE_TIMER
|
2009-01-19 17:47:00 +00:00
|
|
|
|
if (m_ConstantTimer->IsRunning()) m_ConstantTimer->Stop();
|
2009-01-04 21:53:41 +00:00
|
|
|
|
#endif
|
2008-12-27 11:32:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-12-28 18:50:24 +00:00
|
|
|
|
void ConfigBox::OnKeyDown(wxKeyEvent& event)
|
|
|
|
|
{
|
|
|
|
|
/*m_pStatusBar->SetLabel(wxString::Format(
|
|
|
|
|
"Key: %i", event.GetKeyCode()
|
|
|
|
|
));*/
|
|
|
|
|
g_Pressed = event.GetKeyCode();
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// Close window
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2009-02-11 10:30:02 +00:00
|
|
|
|
void ConfigBox::OnClose(wxCloseEvent& event)
|
2008-12-27 11:32:03 +00:00
|
|
|
|
{
|
2009-02-11 10:30:02 +00:00
|
|
|
|
// Allow wxWidgets to close the window
|
|
|
|
|
event.Skip();
|
|
|
|
|
|
|
|
|
|
// Stop the timer
|
|
|
|
|
m_ConstantTimer->Stop();
|
|
|
|
|
|
|
|
|
|
// Close pads, unless we are running a game
|
|
|
|
|
if(!g_EmulatorRunning) Shutdown();
|
2008-12-27 11:32:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Call about dialog
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void ConfigBox::AboutClick(wxCommandEvent& event)
|
|
|
|
|
{
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
wxWindow win;
|
|
|
|
|
win.SetHWND((WXHWND)this->GetHWND());
|
|
|
|
|
win.Enable(false);
|
|
|
|
|
|
|
|
|
|
AboutBox frame(&win);
|
|
|
|
|
frame.ShowModal();
|
|
|
|
|
|
|
|
|
|
win.Enable(true);
|
2009-01-15 06:48:15 +00:00
|
|
|
|
win.SetHWND(0);
|
2008-12-27 11:32:03 +00:00
|
|
|
|
#else
|
|
|
|
|
AboutBox frame(NULL);
|
|
|
|
|
frame.ShowModal();
|
2009-01-15 06:48:15 +00:00
|
|
|
|
#endif
|
2008-12-27 11:32:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Click OK
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void ConfigBox::OKClick(wxCommandEvent& event)
|
|
|
|
|
{
|
|
|
|
|
if (event.GetId() == ID_OK)
|
|
|
|
|
{
|
2009-01-21 18:09:31 +00:00
|
|
|
|
DoSave(); // Save settings
|
2009-01-25 18:20:16 +00:00
|
|
|
|
//g_Config.Load(); // Reload settings to PadMapping
|
2009-01-21 18:09:31 +00:00
|
|
|
|
if(Debugging) PanicAlert("Done");
|
2008-12-27 11:32:03 +00:00
|
|
|
|
Close(); // Call OnClose()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Click Cancel
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void ConfigBox::CancelClick(wxCommandEvent& event)
|
|
|
|
|
{
|
|
|
|
|
if (event.GetId() == ID_CANCEL)
|
|
|
|
|
{
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Forget all potential changes to PadMapping by loading the last saved settings
|
|
|
|
|
g_Config.Load();
|
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
Close(); // Call OnClose()
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-01-20 10:37:48 +00:00
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Debugging
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void ConfigBox::LogMsg(const char* format, ...)
|
|
|
|
|
{
|
2009-01-22 19:53:16 +00:00
|
|
|
|
#ifdef _WIN32
|
2009-01-24 22:13:53 +00:00
|
|
|
|
if(Debugging)
|
|
|
|
|
{
|
|
|
|
|
const int MaxMsgSize = 1024*2;
|
|
|
|
|
char buffer[MaxMsgSize];
|
|
|
|
|
va_list args;
|
|
|
|
|
va_start(args, format);
|
|
|
|
|
CharArrayFromFormatV(buffer, MaxMsgSize, format, args);
|
|
|
|
|
va_end(args);
|
|
|
|
|
|
|
|
|
|
// Add timestamp
|
|
|
|
|
std::string StrTmp = buffer;
|
|
|
|
|
//StrTmp += Common::Timer::GetTimeFormatted();
|
|
|
|
|
|
|
|
|
|
if(m_TCDebugging) m_TCDebugging->AppendText(StrTmp.c_str());
|
|
|
|
|
}
|
2009-01-22 19:53:16 +00:00
|
|
|
|
#endif
|
2009-01-21 18:09:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-01-20 10:37:48 +00:00
|
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
|
// Save Settings
|
|
|
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
Saving is currently done when:
|
|
|
|
|
|
|
|
|
|
1. Closing the configuration window
|
|
|
|
|
2. Changing the gamepad
|
2009-01-21 18:09:31 +00:00
|
|
|
|
3. When the gamepad is enabled or disbled
|
|
|
|
|
4. When we change saving mode (by Id or by slot)
|
2009-01-25 18:20:16 +00:00
|
|
|
|
|
|
|
|
|
Input: ChangePad needs to be used when we change the pad for a slot. Slot needs to be used when
|
|
|
|
|
we only want to save changes to one slot.
|
2009-01-21 18:09:31 +00:00
|
|
|
|
*/
|
|
|
|
|
void ConfigBox::DoSave(bool ChangePad, int Slot)
|
2009-01-20 10:37:48 +00:00
|
|
|
|
{
|
|
|
|
|
// Replace "" with "-1" before we are saving
|
|
|
|
|
ToBlank(false);
|
|
|
|
|
|
|
|
|
|
if(ChangePad)
|
|
|
|
|
{
|
|
|
|
|
// Since we are selecting the pad to save to by the Id we can't update it when we change the pad
|
|
|
|
|
for(int i = 0; i < 4; i++) SaveButtonMapping(i, true);
|
2009-01-25 18:20:16 +00:00
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
g_Config.Save(Slot);
|
2009-01-20 10:37:48 +00:00
|
|
|
|
// Now we can update the ID
|
2009-01-21 18:09:31 +00:00
|
|
|
|
PadMapping[notebookpage].ID = m_Joyname[notebookpage]->GetSelection();
|
2009-01-20 10:37:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2009-01-25 18:20:16 +00:00
|
|
|
|
// Update PadMapping[] from the GUI controls
|
2009-01-20 10:37:48 +00:00
|
|
|
|
for(int i = 0; i < 4; i++) SaveButtonMapping(i);
|
2009-01-21 18:09:31 +00:00
|
|
|
|
g_Config.Save(Slot);
|
2009-01-20 10:37:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-01-25 18:20:16 +00:00
|
|
|
|
// Then change it back to ""
|
2009-01-20 10:37:48 +00:00
|
|
|
|
ToBlank();
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-02 03:16:59 +00:00
|
|
|
|
// On changing the SaveById option we update all pages
|
2009-01-20 10:37:48 +00:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2009-01-21 18:09:31 +00:00
|
|
|
|
void ConfigBox::OnSaveById()
|
2009-01-20 10:37:48 +00:00
|
|
|
|
{
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Save current settings
|
|
|
|
|
DoSave(false, notebookpage);
|
|
|
|
|
|
2009-02-02 03:16:59 +00:00
|
|
|
|
// Update the SaveByID setting and load the settings
|
2009-01-21 18:09:31 +00:00
|
|
|
|
g_Config.bSaveByID = m_CBSaveByID[notebookpage]->IsChecked();
|
|
|
|
|
g_Config.Load(false, true);
|
2009-01-20 10:37:48 +00:00
|
|
|
|
|
2009-02-02 03:16:59 +00:00
|
|
|
|
// Update the GUI from the now updated PadMapping[]
|
|
|
|
|
UpdateGUIAll(-1);
|
2009-01-20 10:37:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Change Joystick
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2009-01-21 18:09:31 +00:00
|
|
|
|
/* Function: When changing the joystick we save and load the settings and update the PadMapping
|
2009-02-10 14:02:01 +00:00
|
|
|
|
and PadState array. PadState[].joy is the gamepad handle that is used to access the pad throughout
|
|
|
|
|
the plugin. Joyinfo[].joy is only used the first time the pads are checked. */
|
2009-01-20 10:37:48 +00:00
|
|
|
|
void ConfigBox::DoChangeJoystick()
|
|
|
|
|
{
|
2009-01-24 22:13:53 +00:00
|
|
|
|
// Close the current pad, unless it's used by another slot
|
|
|
|
|
//if (PadMapping[notebookpage].enabled) PadClose(notebookpage);
|
2009-01-21 18:09:31 +00:00
|
|
|
|
|
|
|
|
|
// Before changing the pad we save potential changes to the current pad (to support SaveByID)
|
2009-01-20 10:37:48 +00:00
|
|
|
|
DoSave(true);
|
2009-01-25 18:20:16 +00:00
|
|
|
|
|
2009-01-20 10:37:48 +00:00
|
|
|
|
// Load the settings for the new Id
|
|
|
|
|
g_Config.Load(true);
|
|
|
|
|
UpdateGUI(notebookpage); // Update the GUI
|
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Open the new pad
|
|
|
|
|
if (PadMapping[notebookpage].enabled) PadOpen(notebookpage);
|
|
|
|
|
}
|
|
|
|
|
void ConfigBox::PadOpen(int Open) // Open for slot 1, 2, 3 or 4
|
|
|
|
|
{
|
2009-01-24 22:13:53 +00:00
|
|
|
|
// Check that we got a good pad
|
|
|
|
|
if (!joyinfo.at(PadMapping[Open].ID).Good)
|
|
|
|
|
{
|
|
|
|
|
PadState[Open].joy = NULL;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PadState[Open].joy = SDL_JoystickOpen(PadMapping[Open].ID);
|
2009-01-20 10:37:48 +00:00
|
|
|
|
}
|
2009-01-21 18:09:31 +00:00
|
|
|
|
void ConfigBox::PadClose(int Close) // Close for slot 1, 2, 3 or 4
|
2009-01-20 10:37:48 +00:00
|
|
|
|
{
|
2009-01-24 22:13:53 +00:00
|
|
|
|
if (SDL_JoystickOpened(PadMapping[Close].ID)) SDL_JoystickClose(PadState[Close].joy);
|
|
|
|
|
PadState[Close].joy = NULL;
|
2009-01-20 10:37:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Notebook page changed
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void ConfigBox::NotebookPageChanged(wxNotebookEvent& event)
|
2009-01-25 18:20:16 +00:00
|
|
|
|
{
|
2009-02-02 03:16:59 +00:00
|
|
|
|
// Save current settings now, don't wait for OK
|
|
|
|
|
if(ControlsCreated && !g_Config.bSaveByID) DoSave(false, notebookpage);
|
|
|
|
|
|
|
|
|
|
// Update the global variable
|
2009-01-20 10:37:48 +00:00
|
|
|
|
notebookpage = event.GetSelection();
|
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Update GUI
|
|
|
|
|
if(ControlsCreated) UpdateGUI(notebookpage);
|
2009-01-20 10:37:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Replace the harder to understand -1 with "" for the sake of user friendliness
|
2009-01-20 14:25:33 +00:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2009-01-20 10:37:48 +00:00
|
|
|
|
void ConfigBox::ToBlank(bool ToBlank)
|
|
|
|
|
{
|
2009-01-25 18:20:16 +00:00
|
|
|
|
if (!ControlsCreated) return;
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < 4; j++)
|
2009-01-20 10:37:48 +00:00
|
|
|
|
{
|
2009-01-25 18:20:16 +00:00
|
|
|
|
if(ToBlank)
|
|
|
|
|
{
|
|
|
|
|
for(int i = IDB_ANALOG_MAIN_X; i <= IDB_BUTTONHALFPRESS; i++)
|
2009-01-20 14:25:33 +00:00
|
|
|
|
#ifndef _WIN32
|
2009-01-25 18:20:16 +00:00
|
|
|
|
if(GetButtonText(i, j).ToAscii() == "-1") SetButtonText(i, "", j);
|
2009-01-20 14:25:33 +00:00
|
|
|
|
#else
|
2009-01-25 18:20:16 +00:00
|
|
|
|
if(GetButtonText(i, j) == "-1") SetButtonText(i, "", j);
|
2009-01-20 14:25:33 +00:00
|
|
|
|
#endif
|
2009-01-25 18:20:16 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for(int i = IDB_ANALOG_MAIN_X; i <= IDB_BUTTONHALFPRESS; i++)
|
|
|
|
|
if(GetButtonText(i, j).IsEmpty()) SetButtonText(i, "-1", j);
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-01-20 10:37:48 +00:00
|
|
|
|
}
|
2008-12-26 02:42:15 +00:00
|
|
|
|
//////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// Change settings
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2009-01-25 18:20:16 +00:00
|
|
|
|
void ConfigBox::SetButtonTextAll(int id, char text[128])
|
2009-01-21 18:09:31 +00:00
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
|
|
|
{
|
2009-02-07 05:57:28 +00:00
|
|
|
|
// Safety check to avoid crash
|
|
|
|
|
if(joyinfo.size() > PadMapping[i].ID)
|
|
|
|
|
if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[notebookpage].ID].Name)
|
|
|
|
|
SetButtonText(id, text, i);
|
2009-01-21 18:09:31 +00:00
|
|
|
|
};
|
|
|
|
|
}
|
2009-01-25 18:20:16 +00:00
|
|
|
|
|
|
|
|
|
void ConfigBox::SaveButtonMappingAll(int Slot)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 4; i++)
|
2009-02-07 05:57:28 +00:00
|
|
|
|
{
|
|
|
|
|
// This can occur when no gamepad is detected
|
|
|
|
|
if(joyinfo.size() > PadMapping[i].ID)
|
|
|
|
|
if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[Slot].ID].Name)
|
|
|
|
|
SaveButtonMapping(i, false, Slot);
|
|
|
|
|
}
|
2009-01-25 18:20:16 +00:00
|
|
|
|
}
|
2009-02-02 03:16:59 +00:00
|
|
|
|
|
|
|
|
|
void ConfigBox::UpdateGUIAll(int Slot)
|
|
|
|
|
{
|
|
|
|
|
if(Slot == -1)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 4; i++) UpdateGUI(i);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 4; i++)
|
2009-02-07 05:57:28 +00:00
|
|
|
|
{
|
|
|
|
|
// Safety check to avoid crash
|
|
|
|
|
if(joyinfo.size() > PadMapping[i].ID)
|
|
|
|
|
if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[Slot].ID].Name)
|
|
|
|
|
UpdateGUI(i);
|
|
|
|
|
}
|
2009-02-02 03:16:59 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
void ConfigBox::ChangeSettings( wxCommandEvent& event )
|
|
|
|
|
{
|
|
|
|
|
switch(event.GetId())
|
|
|
|
|
{
|
|
|
|
|
case IDC_SAVEBYID:
|
2009-01-21 18:09:31 +00:00
|
|
|
|
OnSaveById();
|
|
|
|
|
break;
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-15 06:48:15 +00:00
|
|
|
|
case IDC_SHOWADVANCED:
|
2008-12-27 11:32:03 +00:00
|
|
|
|
g_Config.bShowAdvanced = m_CBShowAdvanced[notebookpage]->IsChecked();
|
|
|
|
|
for(int i = 0; i < 4; i++)
|
|
|
|
|
{
|
|
|
|
|
m_CBShowAdvanced[i]->SetValue(g_Config.bShowAdvanced);
|
|
|
|
|
m_sMainRight[i]->Show(g_Config.bShowAdvanced);
|
|
|
|
|
}
|
|
|
|
|
SizeWindow();
|
|
|
|
|
break;
|
2009-02-10 14:02:01 +00:00
|
|
|
|
// Advanced settings
|
|
|
|
|
case IDCB_CHECKFOCUS:
|
2009-02-03 10:17:01 +00:00
|
|
|
|
g_Config.bCheckFocus = m_CBCheckFocus[notebookpage]->IsChecked();
|
2009-02-03 06:21:22 +00:00
|
|
|
|
for(int i = 0; i < 4; i++)
|
|
|
|
|
{
|
2009-02-03 10:17:01 +00:00
|
|
|
|
m_CBCheckFocus[i]->SetValue(g_Config.bCheckFocus);
|
2009-02-03 06:21:22 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
2009-02-10 14:02:01 +00:00
|
|
|
|
case IDCB_FILTER_SETTINGS:
|
|
|
|
|
g_Config.bNoTriggerFilter = m_AdvancedMapFilter[notebookpage]->IsChecked();
|
|
|
|
|
for(int i = 0; i < 4; i++)
|
|
|
|
|
{
|
|
|
|
|
m_AdvancedMapFilter[i]->SetValue(g_Config.bNoTriggerFilter);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2009-02-18 23:26:16 +00:00
|
|
|
|
#ifdef RERECORDING
|
|
|
|
|
case ID_RECORDING:
|
|
|
|
|
g_Config.bRecording = m_CheckRecording[notebookpage]->IsChecked();
|
|
|
|
|
if(g_Config.bRecording) g_Config.bPlayback = !g_Config.bRecording;
|
|
|
|
|
for(int i = 0; i < 4; i++) m_CheckRecording[i]->SetValue(g_Config.bRecording);
|
|
|
|
|
for(int i = 0; i < 4; i++) m_CheckPlayback[i]->SetValue(g_Config.bPlayback);
|
|
|
|
|
break;
|
|
|
|
|
case ID_PLAYBACK:
|
|
|
|
|
g_Config.bPlayback = m_CheckPlayback[notebookpage]->IsChecked();
|
|
|
|
|
if(g_Config.bPlayback) g_Config.bRecording = !g_Config.bPlayback;
|
|
|
|
|
for(int i = 0; i < 4; i++) m_CheckPlayback[i]->SetValue(g_Config.bPlayback);
|
|
|
|
|
for(int i = 0; i < 4; i++) m_CheckPlayback[i]->SetValue(g_Config.bRecording);
|
|
|
|
|
break;
|
|
|
|
|
case ID_SAVE_RECORDING:
|
|
|
|
|
// Double check again that we are still running a game
|
|
|
|
|
if (g_EmulatorRunning) Recording::Save();
|
|
|
|
|
break;
|
|
|
|
|
#endif
|
2009-02-10 14:02:01 +00:00
|
|
|
|
|
2009-02-02 03:16:59 +00:00
|
|
|
|
case IDC_CONTROLTYPE:
|
2009-02-10 14:02:01 +00:00
|
|
|
|
if(!g_Config.bSaveByID)
|
|
|
|
|
{
|
|
|
|
|
PadMapping[notebookpage].controllertype = m_ControlType[notebookpage]->GetSelection();
|
|
|
|
|
UpdateGUI(notebookpage);
|
|
|
|
|
}
|
2009-02-10 01:25:42 +00:00
|
|
|
|
case IDC_TRIGGERTYPE:
|
2009-02-10 14:02:01 +00:00
|
|
|
|
if(!g_Config.bSaveByID)
|
|
|
|
|
{
|
|
|
|
|
PadMapping[notebookpage].triggertype = m_TriggerType[notebookpage]->GetSelection();
|
|
|
|
|
UpdateGUI(notebookpage);
|
|
|
|
|
}
|
2009-01-20 06:38:29 +00:00
|
|
|
|
break;
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
case IDC_JOYNAME:
|
|
|
|
|
DoChangeJoystick();
|
2009-01-20 06:38:29 +00:00
|
|
|
|
break;
|
2009-01-21 18:09:31 +00:00
|
|
|
|
|
|
|
|
|
case IDC_JOYATTACH:
|
|
|
|
|
// We will enable this device
|
|
|
|
|
int Enable = PadMapping[notebookpage].enabled = !PadMapping[notebookpage].enabled;
|
|
|
|
|
// Close or open pad handle
|
|
|
|
|
if(Enable) PadOpen(notebookpage); else PadClose(notebookpage);
|
|
|
|
|
// Update the GUI
|
|
|
|
|
UpdateGUI(notebookpage);
|
|
|
|
|
return; // Don't save this for all slots
|
2008-12-27 11:32:03 +00:00
|
|
|
|
}
|
2009-01-21 18:09:31 +00:00
|
|
|
|
|
|
|
|
|
// Update all slots that use this device
|
2009-01-25 18:20:16 +00:00
|
|
|
|
if(g_Config.bSaveByID) SaveButtonMappingAll(notebookpage);
|
2009-02-02 03:16:59 +00:00
|
|
|
|
if(g_Config.bSaveByID) UpdateGUIAll(notebookpage);
|
2008-12-27 11:32:03 +00:00
|
|
|
|
}
|
2009-01-21 18:09:31 +00:00
|
|
|
|
///////////////////////////////
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////
|
2009-01-19 05:49:25 +00:00
|
|
|
|
// Update GUI
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Called from: CreateGUIControls(), ChangeControllertype()
|
2009-01-19 05:49:25 +00:00
|
|
|
|
void ConfigBox::UpdateGUI(int _notebookpage)
|
|
|
|
|
{
|
2009-02-07 05:57:28 +00:00
|
|
|
|
// If there are no good pads disable the entire notebook
|
|
|
|
|
if (NumGoodPads == 0)
|
|
|
|
|
{
|
|
|
|
|
m_Notebook->Enable(false);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Update the GUI from PadMapping[]
|
2009-02-10 14:02:01 +00:00
|
|
|
|
UpdateGUIButtonMapping(_notebookpage);
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Collect status
|
2009-02-10 14:02:01 +00:00
|
|
|
|
bool Hat = (PadMapping[_notebookpage].controllertype == InputCommon::CTL_DPAD_HAT);
|
2009-01-20 06:38:29 +00:00
|
|
|
|
long Left, Right;
|
|
|
|
|
m_JoyShoulderL[_notebookpage]->GetValue().ToLong(&Left);
|
|
|
|
|
m_JoyShoulderR[_notebookpage]->GetValue().ToLong(&Right);
|
|
|
|
|
bool AnalogTrigger = (Left >= 1000 || Right >= 1000);
|
2009-01-21 18:09:31 +00:00
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
bool XInput = XInput::IsConnected(0);
|
|
|
|
|
#endif
|
2009-01-20 06:38:29 +00:00
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
// Hat type selection
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_JoyDpadUp[_notebookpage]->Show(!Hat);
|
2009-01-19 17:47:00 +00:00
|
|
|
|
m_JoyDpadLeft[_notebookpage]->Show(!Hat);
|
|
|
|
|
m_JoyDpadRight[_notebookpage]->Show(!Hat);
|
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_bJoyDpadUp[_notebookpage]->Show(!Hat);
|
2009-01-19 17:47:00 +00:00
|
|
|
|
m_bJoyDpadLeft[_notebookpage]->Show(!Hat);
|
|
|
|
|
m_bJoyDpadRight[_notebookpage]->Show(!Hat);
|
2009-01-20 05:28:30 +00:00
|
|
|
|
|
|
|
|
|
m_textDpadUp[_notebookpage]->Show(!Hat);
|
2009-01-19 17:47:00 +00:00
|
|
|
|
m_textDpadLeft[_notebookpage]->Show(!Hat);
|
|
|
|
|
m_textDpadRight[_notebookpage]->Show(!Hat);
|
|
|
|
|
|
2009-02-01 16:29:35 +00:00
|
|
|
|
m_textDpadDown[_notebookpage]->SetLabel(Hat ? wxT("Select hat") : wxT("Down"));
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_bJoyDpadDown[_notebookpage]->SetToolTip(Hat ?
|
2009-01-19 17:47:00 +00:00
|
|
|
|
wxT("Select a hat by pressing the hat in any direction") : wxT(""));
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
|
|
|
|
// General settings
|
2009-01-21 18:09:31 +00:00
|
|
|
|
m_CBSaveByID[_notebookpage]->SetValue(g_Config.bSaveByID);
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_CBShowAdvanced[_notebookpage]->SetValue(g_Config.bShowAdvanced);
|
2009-02-03 06:21:22 +00:00
|
|
|
|
m_CBCheckFocus[_notebookpage]->SetValue(g_Config.bCheckFocus);
|
2009-02-10 14:02:01 +00:00
|
|
|
|
m_AdvancedMapFilter[_notebookpage]->SetValue(g_Config.bNoTriggerFilter);
|
2009-02-18 23:26:16 +00:00
|
|
|
|
#ifdef RERECORDING
|
|
|
|
|
m_CheckRecording[_notebookpage]->SetValue(g_Config.bRecording);
|
|
|
|
|
m_CheckPlayback[_notebookpage]->SetValue(g_Config.bPlayback);
|
|
|
|
|
#endif
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-02-18 23:26:16 +00:00
|
|
|
|
//LogMsg("Update: %i\n", g_Config.bSaveByID);
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-20 10:37:48 +00:00
|
|
|
|
// Disabled pages
|
2009-01-24 00:45:46 +00:00
|
|
|
|
bool Enabled = PadMapping[_notebookpage].enabled == 1 ? true : false;
|
2009-01-19 05:49:25 +00:00
|
|
|
|
// There is no FindItem in linux so this doesn't work
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
// Enable or disable all buttons
|
2009-01-20 10:37:48 +00:00
|
|
|
|
for(int i = IDB_ANALOG_MAIN_X; i <= IDB_BUTTONHALFPRESS; i++)
|
|
|
|
|
m_Controller[_notebookpage]->FindItem(i)->Enable(Enabled);
|
2009-01-19 05:49:25 +00:00
|
|
|
|
// Controller type settings
|
2009-01-20 10:37:48 +00:00
|
|
|
|
m_Controller[_notebookpage]->FindItem(IDC_DEADZONE)->Enable(Enabled);
|
|
|
|
|
m_Controller[_notebookpage]->FindItem(IDC_CONTROLTYPE)->Enable(Enabled);
|
2009-01-20 14:32:15 +00:00
|
|
|
|
m_Controller[_notebookpage]->FindItem(IDC_TRIGGERTYPE)->Enable(Enabled && XInput);
|
2009-01-20 10:37:48 +00:00
|
|
|
|
m_Controller[_notebookpage]->FindItem(IDCB_MAINSTICK_DIAGONAL)->Enable(Enabled);
|
2009-02-10 14:02:01 +00:00
|
|
|
|
m_Controller[_notebookpage]->FindItem(IDCB_MAINSTICK_S_TO_C)->Enable(Enabled);
|
|
|
|
|
m_Controller[_notebookpage]->FindItem(IDCB_FILTER_SETTINGS)->Enable(Enabled);
|
2009-01-19 05:49:25 +00:00
|
|
|
|
#endif
|
2008-12-28 18:50:24 +00:00
|
|
|
|
|
2009-01-20 10:37:48 +00:00
|
|
|
|
// Replace the harder to understand -1 with "" for the sake of user friendliness
|
|
|
|
|
ToBlank();
|
|
|
|
|
|
2009-01-19 05:49:25 +00:00
|
|
|
|
// Repaint the background
|
|
|
|
|
m_Controller[_notebookpage]->Refresh();
|
2008-12-27 11:32:03 +00:00
|
|
|
|
}
|
2009-01-21 18:09:31 +00:00
|
|
|
|
///////////////////////////////
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-21 18:09:31 +00:00
|
|
|
|
|
|
|
|
|
// Paint the background
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void ConfigBox::OnPaint( wxPaintEvent &event )
|
|
|
|
|
{
|
|
|
|
|
event.Skip();
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
wxPaintDC dcWin(m_pKeys[notebookpage]);
|
|
|
|
|
PrepareDC( dcWin );
|
2009-01-21 18:09:31 +00:00
|
|
|
|
if(PadMapping[notebookpage].enabled)
|
2008-12-26 02:42:15 +00:00
|
|
|
|
dcWin.DrawBitmap( WxStaticBitmap1_BITMAP, 94, 0, true );
|
2008-12-27 11:32:03 +00:00
|
|
|
|
else
|
|
|
|
|
dcWin.DrawBitmap( WxStaticBitmap1_BITMAPGray, 94, 0, true );
|
2008-12-26 02:42:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Populate the config window
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2008-12-08 05:25:12 +00:00
|
|
|
|
void ConfigBox::CreateGUIControls()
|
|
|
|
|
{
|
2009-01-24 22:13:53 +00:00
|
|
|
|
Console::Print("CreateGUIControls()\n");
|
|
|
|
|
|
2008-12-08 05:25:12 +00:00
|
|
|
|
#ifndef _DEBUG
|
|
|
|
|
SetTitle(wxT("Configure: nJoy v"INPUT_VERSION" Input Plugin"));
|
|
|
|
|
#else
|
|
|
|
|
SetTitle(wxT("Configure: nJoy v"INPUT_VERSION" (Debug) Input Plugin"));
|
|
|
|
|
#endif
|
2009-01-15 06:48:15 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
SetIcon(wxNullIcon);
|
|
|
|
|
|
2008-12-08 05:25:12 +00:00
|
|
|
|
#ifndef _WIN32
|
|
|
|
|
// Force a 8pt font so that it looks more or less "correct" regardless of the default font setting
|
2009-01-04 21:53:41 +00:00
|
|
|
|
wxFont f(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
SetFont(f);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// Buttons
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_About = new wxButton(this, ID_ABOUT, wxT("About"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("About"));
|
|
|
|
|
m_OK = new wxButton(this, ID_OK, wxT("OK"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("OK"));
|
|
|
|
|
m_Cancel = new wxButton(this, ID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("Cancel"));
|
2008-12-28 18:50:24 +00:00
|
|
|
|
m_OK->SetToolTip(
|
|
|
|
|
wxT("Save your settings and close this window.")
|
|
|
|
|
);
|
|
|
|
|
m_Cancel->SetToolTip(
|
|
|
|
|
wxT("Close this window without saving your changes.")
|
|
|
|
|
);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
|
|
|
|
// Notebook
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize);
|
2009-01-15 06:48:15 +00:00
|
|
|
|
|
2008-12-08 05:25:12 +00:00
|
|
|
|
// Controller pages
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_Controller[0] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE1, wxDefaultPosition, wxDefaultSize);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_Notebook->AddPage(m_Controller[0], wxT("Controller 1"));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_Controller[1] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE2, wxDefaultPosition, wxDefaultSize);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_Notebook->AddPage(m_Controller[1], wxT("Controller 2"));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_Controller[2] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE3, wxDefaultPosition, wxDefaultSize);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_Notebook->AddPage(m_Controller[2], wxT("Controller 3"));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_Controller[3] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE4, wxDefaultPosition, wxDefaultSize);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_Notebook->AddPage(m_Controller[3], wxT("Controller 4"));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
|
|
|
|
// Define bitmap for EVT_PAINT
|
|
|
|
|
WxStaticBitmap1_BITMAP = wxBitmap(ConfigBox_WxStaticBitmap1_XPM);
|
|
|
|
|
|
|
|
|
|
// Gray version
|
|
|
|
|
wxImage WxImageGray = WxStaticBitmap1_BITMAP.ConvertToImage();
|
|
|
|
|
WxImageGray = WxImageGray.ConvertToGreyscale();
|
|
|
|
|
WxStaticBitmap1_BITMAPGray = wxBitmap(WxImageGray);
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
2009-01-15 06:48:15 +00:00
|
|
|
|
// Search for devices and add them to the device list
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// -----------------------------
|
|
|
|
|
wxArrayString arrayStringFor_Joyname; // The string array
|
2009-01-24 22:13:53 +00:00
|
|
|
|
if(NumGoodPads > 0)
|
2008-12-08 05:25:12 +00:00
|
|
|
|
{
|
2009-01-24 22:13:53 +00:00
|
|
|
|
for(int x = 0; x < joyinfo.size(); x++)
|
2008-12-08 05:25:12 +00:00
|
|
|
|
{
|
2009-01-21 18:09:31 +00:00
|
|
|
|
arrayStringFor_Joyname.Add(wxString::FromAscii(joyinfo[x].Name.c_str()));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2009-02-07 05:57:28 +00:00
|
|
|
|
arrayStringFor_Joyname.Add(wxString::FromAscii("<No Gamepad Detected>"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// --------------------------------------------------------------------
|
2009-01-20 05:28:30 +00:00
|
|
|
|
// Populate the DPad type and Trigger type list
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// -----------------------------
|
2009-01-20 05:28:30 +00:00
|
|
|
|
wxArrayString wxAS_DPadType;
|
2009-02-10 14:02:01 +00:00
|
|
|
|
wxAS_DPadType.Add(wxString::FromAscii(DPadType[InputCommon::CTL_DPAD_HAT]));
|
|
|
|
|
wxAS_DPadType.Add(wxString::FromAscii(DPadType[InputCommon::CTL_DPAD_CUSTOM]));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
wxArrayString wxAS_TriggerType;
|
2009-02-10 14:02:01 +00:00
|
|
|
|
wxAS_TriggerType.Add(wxString::FromAscii(TriggerType[InputCommon::CTL_TRIGGER_SDL]));
|
|
|
|
|
wxAS_TriggerType.Add(wxString::FromAscii(TriggerType[InputCommon::CTL_TRIGGER_XINPUT]));
|
2009-01-15 06:48:15 +00:00
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate the deadzone list
|
|
|
|
|
// -----------------------------
|
2008-12-08 05:25:12 +00:00
|
|
|
|
char buffer [8];
|
2008-12-27 11:32:03 +00:00
|
|
|
|
wxArrayString arrayStringFor_Deadzone;
|
2008-12-08 05:25:12 +00:00
|
|
|
|
for(int x = 1; x <= 100; x++)
|
|
|
|
|
{
|
|
|
|
|
sprintf (buffer, "%d %%", x);
|
|
|
|
|
arrayStringFor_Deadzone.Add(wxString::FromAscii(buffer));
|
|
|
|
|
}
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// Populate all four pages
|
2009-01-20 06:38:29 +00:00
|
|
|
|
for(int i = 0; i < 4; i++)
|
2009-01-15 06:48:15 +00:00
|
|
|
|
{
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate keys sizer
|
|
|
|
|
// -----------------------------
|
|
|
|
|
// Set relative values for the keys
|
|
|
|
|
int t = -75; // Top
|
|
|
|
|
int l = -4; // Left
|
|
|
|
|
m_sKeys[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Keys"));
|
2009-01-19 17:47:00 +00:00
|
|
|
|
m_pKeys[i] = new wxPanel(m_Controller[i], ID_KEYSPANEL1 + i, wxDefaultPosition, wxSize(600, 400), 0);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
//m_sKeys[i] = new wxStaticBox (m_Controller[i], IDG_JOYSTICK, wxT("Keys"), wxDefaultPosition, wxSize(608, 500));
|
|
|
|
|
m_sKeys[i]->Add(m_pKeys[i], 0, (wxALL), 0); // margin = 0
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// GameCube controller picture
|
|
|
|
|
// -----------------------------
|
|
|
|
|
// TODO: Controller image
|
|
|
|
|
// Placeholder instead of bitmap
|
|
|
|
|
// m_PlaceholderBMP[i] = new wxTextCtrl(m_Controller[i], ID_CONTROLLERPICTURE, wxT("BITMAP HERE PLZ KTHX!"), wxPoint(98, 75), wxSize(423, 306), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("BITMAP HERE PLZ KTHX!"));
|
|
|
|
|
// m_PlaceholderBMP[i]->Enable(false);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
/* You can enable the bitmap here. But it loads <20>berslow on init... (only in windows, linux
|
|
|
|
|
seems to load it fast!) AAaaand the XPM file (256 colours) looks crappier than the real bitmap...
|
|
|
|
|
so maybe we can find a way to use a bitmap? */
|
|
|
|
|
//m_controllerimage[i] = new wxStaticBitmap(m_pKeys[i], ID_CONTROLLERPICTURE, WxStaticBitmap1_BITMAP, wxPoint(l + 98, t + 75), wxSize(421,304));
|
|
|
|
|
//m_controllerimage[i] = new wxBitmap( WxStaticBitmap1_BITMAP );
|
|
|
|
|
|
|
|
|
|
// Paint background. This allows objects to be visible on top of the picture
|
|
|
|
|
m_pKeys[i]->Connect(wxID_ANY, wxEVT_PAINT,
|
|
|
|
|
wxPaintEventHandler(ConfigBox::OnPaint),
|
|
|
|
|
(wxObject*)0, this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Keys objects
|
|
|
|
|
// -----------------------------
|
2009-01-19 05:49:25 +00:00
|
|
|
|
// Left and right shoulder buttons
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyShoulderL[i] = new wxTextCtrl(m_pKeys[i], ID_SHOULDER_L, wxT("0"), wxPoint(l + 6, t + 80), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyShoulderL[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_bJoyShoulderL[i] = new wxButton(m_pKeys[i], IDB_SHOULDER_L, wxEmptyString, wxPoint(l + 70, t + 82), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
2009-01-19 05:49:25 +00:00
|
|
|
|
m_JoyShoulderR[i] = new wxTextCtrl(m_pKeys[i], ID_SHOULDER_R, wxT("0"), wxPoint(l + 552, t + 106), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
|
|
|
|
m_JoyShoulderR[i]->Enable(false);
|
|
|
|
|
m_bJoyShoulderR[i] = new wxButton(m_pKeys[i], IDB_SHOULDER_R, wxEmptyString, wxPoint(l + 526, t + 108), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// Left analog
|
2009-01-19 17:47:00 +00:00
|
|
|
|
int ALt = 169; int ALw = ALt + 14; int ALb = ALw + 2; // Set offset
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyAnalogMainX[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_MAIN_X, wxT("0"), wxPoint(l + 6, t + ALw), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyAnalogMainX[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyAnalogMainY[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_MAIN_Y, wxT("0"), wxPoint(l + 6, t + ALw + 36), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
|
|
|
|
m_JoyAnalogMainY[i]->Enable(false);
|
|
|
|
|
m_bJoyAnalogMainX[i] = new wxButton(m_pKeys[i], IDB_ANALOG_MAIN_X, wxEmptyString, wxPoint(l + 70, t + ALb), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyAnalogMainY[i] = new wxButton(m_pKeys[i], IDB_ANALOG_MAIN_Y, wxEmptyString, wxPoint(l + 70, t + ALb + 36), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_textMainX[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_MAIN_X, wxT("X-axis"), wxPoint(l + 6, t + ALt), wxDefaultSize, 0, wxT("X-axis"));
|
|
|
|
|
m_textMainY[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_MAIN_Y, wxT("Y-axis"), wxPoint(l + 6, t + ALt + 36), wxDefaultSize, 0, wxT("Y-axis"));
|
2009-01-19 17:47:00 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// D-Pad
|
2009-01-19 17:47:00 +00:00
|
|
|
|
int DPt = 250; int DPw = DPt + 14; int DPb = DPw + 2; // Set offset
|
2009-01-19 05:49:25 +00:00
|
|
|
|
m_JoyDpadUp[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_UP, wxT("0"), wxPoint(l + 6, t + DPw), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
|
|
|
|
m_JoyDpadDown[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_DOWN, wxT("0"), wxPoint(l + 6, t + DPw + 36*1), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
|
|
|
|
m_JoyDpadLeft[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_LEFT, wxT("0"), wxPoint(l + 6, t + DPw + 36*2), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
|
|
|
|
m_JoyDpadRight[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_RIGHT, wxT("0"), wxPoint(l + 6, t + DPw + 36*3), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyDpadUp[i]->Enable(false);
|
|
|
|
|
m_JoyDpadDown[i]->Enable(false);
|
|
|
|
|
m_JoyDpadLeft[i]->Enable(false);
|
|
|
|
|
m_JoyDpadRight[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_bJoyDpadUp[i] = new wxButton(m_pKeys[i], IDB_DPAD_UP, wxEmptyString, wxPoint(l + 70, t + DPb + 36*0), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyDpadDown[i] = new wxButton(m_pKeys[i], IDB_DPAD_DOWN, wxEmptyString, wxPoint(l + 70, t + DPb + 36*1), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyDpadLeft[i] = new wxButton(m_pKeys[i], IDB_DPAD_LEFT, wxEmptyString, wxPoint(l + 70, t + DPb + 36*2), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyDpadRight[i] = new wxButton(m_pKeys[i], IDB_DPAD_RIGHT, wxEmptyString, wxPoint(l + 70, t + DPb + 36*3), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_textDpadUp[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_UP, wxT("Up"), wxPoint(l + 6, t + DPt + 36*0), wxDefaultSize, 0, wxT("Up"));
|
|
|
|
|
m_textDpadDown[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_DOWN, wxT("Down"), wxPoint(l + 6, t + DPt + 36*1), wxDefaultSize, 0, wxT("Down"));
|
|
|
|
|
m_textDpadLeft[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_LEFT, wxT("Left"), wxPoint(l + 6, t + DPt + 36*2), wxDefaultSize, 0, wxT("Left"));
|
|
|
|
|
m_textDpadRight[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_RIGHT, wxT("Right"), wxPoint(l + 6, t + DPt + 36*3), wxDefaultSize, 0, wxT("Right"));
|
2009-01-19 17:47:00 +00:00
|
|
|
|
|
2009-01-19 05:49:25 +00:00
|
|
|
|
// Buttons
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyButtonA[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_A, wxT("0"), wxPoint(l + 552, t + 280), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyButtonA[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyButtonB[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_B, wxT("0"), wxPoint(l + 552, t + 80), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyButtonB[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyButtonX[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_X, wxT("0"), wxPoint(l + 552, t + 242), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyButtonX[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyButtonY[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_Y, wxT("0"), wxPoint(l + 552, t + 171), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyButtonY[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyButtonZ[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_Z, wxT("0"), wxPoint(l + 552, t + 145), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyButtonZ[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_bJoyButtonA[i] = new wxButton(m_pKeys[i], IDB_BUTTON_A, wxEmptyString, wxPoint(l + 526, t + 282), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyButtonB[i] = new wxButton(m_pKeys[i], IDB_BUTTON_B, wxEmptyString, wxPoint(l + 526, t + 82), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyButtonX[i] = new wxButton(m_pKeys[i], IDB_BUTTON_X, wxEmptyString, wxPoint(l + 526, t + 244), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyButtonY[i] = new wxButton(m_pKeys[i], IDB_BUTTON_Y, wxEmptyString, wxPoint(l + 526, t + 173), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyButtonZ[i] = new wxButton(m_pKeys[i], IDB_BUTTON_Z, wxEmptyString, wxPoint(l + 526, t + 147), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
|
|
|
|
|
// C-buttons
|
|
|
|
|
m_JoyAnalogSubX[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_SUB_X, wxT("0"), wxPoint(l + 552, t + 336), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyAnalogSubX[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyAnalogSubY[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_SUB_Y, wxT("0"), wxPoint(l + 552, t + 373), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyAnalogSubY[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_bJoyAnalogSubX[i] = new wxButton(m_pKeys[i], IDB_ANALOG_SUB_X, wxEmptyString, wxPoint(l + 526, t + 338), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_bJoyAnalogSubY[i] = new wxButton(m_pKeys[i], IDB_ANALOG_SUB_Y, wxEmptyString, wxPoint(l + 526, t + 375), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_textSubX[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_SUB_X, wxT("X-axis"), wxPoint(l + 552, t + 321), wxDefaultSize, 0, wxT("X-axis"));
|
|
|
|
|
m_textSubY[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_SUB_Y, wxT("Y-axis"), wxPoint(l + 552, t + 358), wxDefaultSize, 0, wxT("Y-axis"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// Start button
|
|
|
|
|
m_bJoyButtonStart[i] = new wxButton(m_pKeys[i], IDB_BUTTONSTART, wxEmptyString, wxPoint(l + 284, t + 365), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
|
|
|
|
m_JoyButtonStart[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTONSTART, wxT("0"), wxPoint(l + 220, t + 363), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyButtonStart[i]->Enable(false);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
|
|
|
|
// Website text
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
m_textWebsite[i] = new wxStaticText(m_pKeys[i], IDT_WEBSITE, wxT("www.multigesture.net"), wxPoint(l + 400, t + 380), wxDefaultSize, 0, wxT("www.multigesture.net"));
|
|
|
|
|
#else
|
|
|
|
|
m_textWebsite[i] = new wxStaticText(m_Controller[i], IDT_WEBSITE, wxT("www.multigesture.net"), wxPoint(l + 480, t + 418), wxDefaultSize, 0, wxT("www.multigesture.net"));
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate Controller sizer
|
|
|
|
|
// -----------------------------
|
|
|
|
|
// Groups
|
|
|
|
|
#ifdef _WIN32
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_Joyname[i] = new wxComboBox(m_Controller[i], IDC_JOYNAME, arrayStringFor_Joyname[0], wxDefaultPosition, wxSize(476, 21), arrayStringFor_Joyname, wxCB_READONLY);
|
|
|
|
|
m_Joyattach[i] = new wxCheckBox(m_Controller[i], IDC_JOYATTACH, wxT("Controller attached"), wxDefaultPosition, wxSize(109, 25));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
#else
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_Joyname[i] = new wxComboBox(m_Controller[i], IDC_JOYNAME, arrayStringFor_Joyname[0], wxDefaultPosition, wxSize(450, 25), arrayStringFor_Joyname, 0, wxDefaultValidator, wxT("m_Joyname"));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_Joyattach[i] = new wxCheckBox(m_Controller[i], IDC_JOYATTACH, wxT("Controller attached"), wxDefaultPosition, wxSize(140, 25), 0, wxDefaultValidator, wxT("Controller attached"));
|
|
|
|
|
#endif
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_Joyattach[i]->SetToolTip(wxString::Format(wxT("Decide if Controller %i shall be detected by the game."), i + 1));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
|
|
|
|
m_gJoyname[i] = new wxStaticBoxSizer (wxHORIZONTAL, m_Controller[i], wxT("Controller:"));
|
|
|
|
|
m_gJoyname[i]->Add(m_Joyname[i], 0, (wxLEFT | wxRIGHT), 5);
|
|
|
|
|
m_gJoyname[i]->Add(m_Joyattach[i], 0, (wxRIGHT | wxLEFT | wxBOTTOM), 1);
|
|
|
|
|
|
2008-12-28 18:50:24 +00:00
|
|
|
|
m_Joyname[i]->SetToolTip(wxT("Save your settings and configure another joypad"));
|
|
|
|
|
|
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
////////////////////////////////////////////
|
|
|
|
|
// General settings
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
// General settings 1
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_JoyButtonHalfpress[i] = new wxTextCtrl(m_Controller[i], ID_BUTTONHALFPRESS, wxT("0"), wxDefaultPosition, wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_JoyButtonHalfpress[i]->Enable(false);
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_bJoyButtonHalfpress[i] = new wxButton(m_Controller[i], IDB_BUTTONHALFPRESS, wxEmptyString, wxDefaultPosition, wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
#ifdef _WIN32
|
2008-12-28 18:50:24 +00:00
|
|
|
|
m_Deadzone[i] = new wxComboBox(m_Controller[i], IDC_DEADZONE, wxEmptyString, wxDefaultPosition, wxSize(59, 21), arrayStringFor_Deadzone, wxCB_READONLY, wxDefaultValidator, wxT("m_Deadzone"));
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_textDeadzone[i] = new wxStaticText(m_Controller[i], IDT_DEADZONE, wxT("Deadzone"));
|
|
|
|
|
m_textHalfpress[i] = new wxStaticText(m_Controller[i], IDT_BUTTONHALFPRESS, wxT("Half press"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
#else
|
2008-12-28 18:50:24 +00:00
|
|
|
|
m_Deadzone[i] = new wxComboBox(m_Controller[i], IDC_DEADZONE, wxEmptyString, wxPoint(167, 398), wxSize(80, 25), arrayStringFor_Deadzone, wxCB_READONLY, wxDefaultValidator, wxT("m_Deadzone"));
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_textDeadzone[i] = new wxStaticText(m_Controller[i], IDT_DEADZONE, wxT("Deadzone"), wxPoint(105, 404), wxDefaultSize, 0, wxT("Deadzone"));
|
|
|
|
|
m_textHalfpress[i] = new wxStaticText(m_Controller[i], IDT_BUTTONHALFPRESS, wxT("Half press"), wxPoint(105, 428), wxDefaultSize, 0, wxT("Half press"));
|
2008-12-26 02:42:15 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
// Populate general settings 1
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_gExtrasettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Extra settings"));
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_gGBExtrasettings[i] = new wxGridBagSizer(0, 0);
|
|
|
|
|
m_gGBExtrasettings[i]->Add(m_textDeadzone[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxRIGHT | wxTOP), 3);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_gGBExtrasettings[i]->Add(m_Deadzone[i], wxGBPosition(0, 1), wxGBSpan(1, 1), (wxBOTTOM), 2);
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_gGBExtrasettings[i]->Add(m_textHalfpress[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxRIGHT | wxTOP), 3);
|
|
|
|
|
m_gGBExtrasettings[i]->Add(m_JoyButtonHalfpress[i], wxGBPosition(1, 1), wxGBSpan(1, 1), (wxALL), 0);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_gGBExtrasettings[i]->Add(m_bJoyButtonHalfpress[i], wxGBPosition(1, 2), wxGBSpan(1, 1), (wxLEFT | wxTOP), 2);
|
|
|
|
|
m_gExtrasettings[i]->Add(m_gGBExtrasettings[i], 0, wxEXPAND | wxALL, 3);
|
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
// Create general settings 2 (controller typ)
|
|
|
|
|
m_TSControltype[i] = new wxStaticText(m_Controller[i], IDT_DPADTYPE, wxT("D-Pad"));
|
|
|
|
|
m_TSTriggerType[i] = new wxStaticText(m_Controller[i], IDT_TRIGGERTYPE, wxT("Trigger"));
|
|
|
|
|
m_ControlType[i] = new wxComboBox(m_Controller[i], IDC_CONTROLTYPE, wxAS_DPadType[0], wxDefaultPosition, wxDefaultSize, wxAS_DPadType, wxCB_READONLY);
|
|
|
|
|
m_TriggerType[i] = new wxComboBox(m_Controller[i], IDC_TRIGGERTYPE, wxAS_TriggerType[0], wxDefaultPosition, wxDefaultSize, wxAS_TriggerType, wxCB_READONLY);
|
|
|
|
|
|
|
|
|
|
// Populate general settings 2 (controller typ)
|
2009-01-20 10:37:48 +00:00
|
|
|
|
m_gGenSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("D-Pad and Trigger"));
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_gGBGenSettings[i] = new wxGridBagSizer(0, 0);
|
|
|
|
|
m_gGBGenSettings[i]->Add(m_TSControltype[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxTOP), 4);
|
|
|
|
|
m_gGBGenSettings[i]->Add(m_ControlType[i], wxGBPosition(0, 1), wxGBSpan(1, 1), (wxBOTTOM | wxLEFT), 2);
|
|
|
|
|
m_gGBGenSettings[i]->Add(m_TSTriggerType[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxTOP), 4);
|
|
|
|
|
m_gGBGenSettings[i]->Add(m_TriggerType[i], wxGBPosition(1, 1), wxGBSpan(1, 1), (wxLEFT), 2);
|
|
|
|
|
m_gGenSettings[i]->Add(m_gGBGenSettings[i], 0, wxEXPAND | wxALL, 3);
|
|
|
|
|
|
|
|
|
|
// Create objects for general settings 3
|
|
|
|
|
m_gGenSettingsID[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Settings") );
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_CBSaveByID[i] = new wxCheckBox(m_Controller[i], IDC_SAVEBYID, wxT("Save by ID"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
|
|
|
|
|
m_CBShowAdvanced[i] = new wxCheckBox(m_Controller[i], IDC_SHOWADVANCED, wxT("Show advanced settings"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
|
2008-12-28 18:50:24 +00:00
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
// Populate general settings 3
|
2009-01-21 18:09:31 +00:00
|
|
|
|
m_gGenSettingsID[i]->Add(m_CBSaveByID[i], 0, wxEXPAND | wxALL, 3);
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_gGenSettingsID[i]->Add(m_CBShowAdvanced[i], 0, wxEXPAND | wxALL, 3);
|
2008-12-28 18:50:24 +00:00
|
|
|
|
|
2009-01-20 10:37:48 +00:00
|
|
|
|
// Create tooltips
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_ControlType[i]->SetToolTip(wxT(
|
|
|
|
|
"Use a 'hat' on your gamepad or configure a custom button for each direction."
|
2009-01-20 10:37:48 +00:00
|
|
|
|
));
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_TriggerType[i]->SetToolTip(wxT(
|
2009-01-20 14:25:33 +00:00
|
|
|
|
"Select XInput if you want the triggers to work with the XBox 360 pad."
|
2009-01-20 10:37:48 +00:00
|
|
|
|
));
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_CBSaveByID[i]->SetToolTip(wxString::Format(wxT(
|
|
|
|
|
"Map these settings to the selected controller device instead of to the"
|
2009-01-21 18:09:31 +00:00
|
|
|
|
"\nselected slot (1, 2, 3 or 4). This may be a more convenient way"
|
2008-12-27 11:32:03 +00:00
|
|
|
|
"\nto save your settings if you have multiple controllers.")
|
|
|
|
|
, i+1
|
2009-01-21 18:09:31 +00:00
|
|
|
|
));
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// Populate settings
|
|
|
|
|
m_sSettings[i] = new wxBoxSizer ( wxHORIZONTAL );
|
|
|
|
|
m_sSettings[i]->Add(m_gExtrasettings[i], 0, wxEXPAND | wxALL, 0);
|
2009-01-15 06:48:15 +00:00
|
|
|
|
m_sSettings[i]->Add(m_gGenSettings[i], 0, wxEXPAND | wxLEFT, 5);
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_sSettings[i]->Add(m_gGenSettingsID[i], 0, wxEXPAND | wxLEFT, 5);
|
|
|
|
|
// -------------------------
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
//////////////////////////// General settings
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2009-01-20 05:28:30 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////
|
|
|
|
|
// Advanced settings
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
2009-02-10 14:02:01 +00:00
|
|
|
|
// Input status controls
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
|
|
|
|
// Input status text
|
2009-02-10 12:40:06 +00:00
|
|
|
|
CreateAdvancedControls(i);
|
|
|
|
|
|
2009-02-10 14:02:01 +00:00
|
|
|
|
// Sizers
|
|
|
|
|
m_GBAdvancedMainStick[i] = new wxGridBagSizer(0, 0);
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_GBAdvancedMainStick[i]->Add(m_pInStatus[i], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 0);
|
|
|
|
|
m_GBAdvancedMainStick[i]->Add(m_pOutStatus[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxLEFT, 5);
|
|
|
|
|
m_GBAdvancedMainStick[i]->Add(m_TStatusIn[i], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL, 0);
|
|
|
|
|
m_GBAdvancedMainStick[i]->Add(m_TStatusOut[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxLEFT, 5);
|
|
|
|
|
|
|
|
|
|
m_gStatusIn[i]->Add(m_GBAdvancedMainStick[i], 0, wxLEFT, 5);
|
|
|
|
|
|
|
|
|
|
// Populate input status settings
|
|
|
|
|
|
|
|
|
|
// The label
|
|
|
|
|
m_STDiagonal[i] = new wxStaticText(m_Controller[i], IDT_MAINSTICK_DIAGONAL, wxT("Diagonal"));
|
|
|
|
|
m_STDiagonal[i]->SetToolTip(wxT(
|
|
|
|
|
"To produce a smooth circle in the 'Out' window you have to manually set"
|
|
|
|
|
"\nyour diagonal values here from the 'In' window."
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
// The drop down menu
|
|
|
|
|
m_gStatusInSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Main-stick settings"));
|
|
|
|
|
m_gStatusInSettingsH[i] = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
|
wxArrayString asStatusInSet;
|
|
|
|
|
asStatusInSet.Add(wxT("100%"));
|
|
|
|
|
asStatusInSet.Add(wxT("95%"));
|
|
|
|
|
asStatusInSet.Add(wxT("90%"));
|
|
|
|
|
asStatusInSet.Add(wxT("85%"));
|
|
|
|
|
m_CoBDiagonal[i] = new wxComboBox(m_Controller[i], IDCB_MAINSTICK_DIAGONAL, asStatusInSet[0], wxDefaultPosition, wxDefaultSize, asStatusInSet, wxCB_READONLY);
|
|
|
|
|
|
|
|
|
|
// The checkbox
|
|
|
|
|
m_CBS_to_C[i] = new wxCheckBox(m_Controller[i], IDCB_MAINSTICK_S_TO_C, wxT("Square-to-circle"));
|
2009-01-20 10:37:48 +00:00
|
|
|
|
m_CBS_to_C[i]->SetToolTip(wxT(
|
|
|
|
|
"This will convert a square stick radius to a circle stick radius like the one that the actual GameCube pad produce."
|
|
|
|
|
" That is also the input the games expect to see."
|
|
|
|
|
));
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
|
|
|
|
m_gStatusInSettings[i]->Add(m_CBS_to_C[i], 0, (wxALL), 4);
|
|
|
|
|
m_gStatusInSettings[i]->Add(m_gStatusInSettingsH[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4);
|
|
|
|
|
|
|
|
|
|
m_gStatusInSettingsH[i]->Add(m_STDiagonal[i], 0, wxTOP, 3);
|
|
|
|
|
m_gStatusInSettingsH[i]->Add(m_CoBDiagonal[i], 0, wxLEFT, 3);
|
2009-01-20 05:28:30 +00:00
|
|
|
|
|
|
|
|
|
// The trigger values
|
|
|
|
|
m_gStatusTriggers[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Trigger values"));
|
|
|
|
|
m_TStatusTriggers[i] = new wxStaticText(m_Controller[i], IDT_TRIGGERS, wxT("Left: Right:"));
|
|
|
|
|
m_gStatusTriggers[i]->Add(m_TStatusTriggers[i], 0, (wxALL), 4);
|
2009-02-10 14:02:01 +00:00
|
|
|
|
|
|
|
|
|
m_gStatusAdvancedSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Advanced settings"));
|
|
|
|
|
m_CBCheckFocus[i] = new wxCheckBox(m_Controller[i], IDCB_CHECKFOCUS, wxT("Allow out of focus input"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
|
|
|
|
|
m_AdvancedMapFilter[i] = new wxCheckBox(m_Controller[i], IDCB_FILTER_SETTINGS , wxT("No trigger filter"));
|
|
|
|
|
m_gStatusAdvancedSettings[i]->Add(m_CBCheckFocus[i], 0, (wxALL), 4);
|
|
|
|
|
m_gStatusAdvancedSettings[i]->Add(m_AdvancedMapFilter[i], 0, (wxALL), 4);
|
|
|
|
|
|
|
|
|
|
// Tool tips
|
|
|
|
|
m_CBCheckFocus[i]->SetToolTip(wxT(
|
|
|
|
|
"Allow gamepad input even when Dolphin is not in focus. Out of focus keyboard input is never allowed."));
|
|
|
|
|
m_AdvancedMapFilter[i]->SetToolTip(wxT(
|
|
|
|
|
"This will allow you to map a digital axis to the main stick or the C-stick. If you don't have"
|
|
|
|
|
" any analog triggers that will be automatically set when the trigger filter is off."
|
|
|
|
|
));
|
2009-01-20 05:28:30 +00:00
|
|
|
|
////////////////////////// Advanced settings
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
//////////////////////////////////////
|
|
|
|
|
// Populate sizers
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate main left sizer
|
|
|
|
|
// -----------------------------
|
|
|
|
|
m_sMainLeft[i] = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_sMainLeft[i]->Add(m_gJoyname[i], 0, wxEXPAND | (wxALL), 5);
|
|
|
|
|
m_sMainLeft[i]->Add(m_sKeys[i], 1, wxEXPAND | (wxLEFT | wxRIGHT), 5);
|
|
|
|
|
m_sMainLeft[i]->Add(m_sSettings[i], 0, wxEXPAND | (wxALL), 5);
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate main right sizer
|
|
|
|
|
// -----------------------------
|
|
|
|
|
m_sMainRight[i] = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_sMainRight[i]->Add(m_gStatusIn[i], 0, wxEXPAND | (wxLEFT), 2);
|
|
|
|
|
m_sMainRight[i]->Add(m_gStatusInSettings[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2);
|
2009-01-20 05:28:30 +00:00
|
|
|
|
m_sMainRight[i]->Add(m_gStatusTriggers[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2);
|
2009-02-18 23:26:16 +00:00
|
|
|
|
m_sMainRight[i]->Add(m_gStatusAdvancedSettings[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2);
|
|
|
|
|
#ifdef RERECORDING
|
|
|
|
|
m_sMainRight[i]->Add(m_SizeRecording[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2);
|
|
|
|
|
#endif
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate main sizer
|
|
|
|
|
// -----------------------------
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_sMain[i] = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
|
m_sMain[i]->Add(m_sMainLeft[i], 0, wxEXPAND | (wxALL), 0);
|
|
|
|
|
m_sMain[i]->Add(m_sMainRight[i], 0, wxEXPAND | (wxRIGHT | wxTOP), 5);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_Controller[i]->SetSizer(m_sMain[i]); // Set the main sizer
|
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// Show or hide it. We have to do this after we add it to its sizer
|
|
|
|
|
m_sMainRight[i]->Show(g_Config.bShowAdvanced);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// Don't allow these changes when running
|
2009-02-10 14:02:01 +00:00
|
|
|
|
if(g_EmulatorRunning)
|
2008-12-08 05:25:12 +00:00
|
|
|
|
{
|
2009-02-11 10:30:02 +00:00
|
|
|
|
//m_Joyname[i]->Enable(false);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
m_Joyattach[i]->Enable(false);
|
2009-02-11 10:30:02 +00:00
|
|
|
|
//m_ControlType[i]->Enable(false);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
}
|
2009-01-19 05:49:25 +00:00
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// Update GUI
|
2009-01-19 05:49:25 +00:00
|
|
|
|
UpdateGUI(i);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
} // end of loop
|
|
|
|
|
|
2009-01-15 06:48:15 +00:00
|
|
|
|
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate buttons sizer.
|
|
|
|
|
// -----------------------------
|
|
|
|
|
wxBoxSizer * m_sButtons = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
|
m_sButtons->Add(m_About, 0, (wxBOTTOM), 0);
|
|
|
|
|
m_sButtons->AddStretchSpacer(1);
|
|
|
|
|
m_sButtons->Add(m_OK, 0, wxALIGN_RIGHT | (wxBOTTOM), 0);
|
|
|
|
|
m_sButtons->Add(m_Cancel, 0, wxALIGN_RIGHT | (wxLEFT), 5);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Populate master sizer.
|
|
|
|
|
// -----------------------------
|
2008-12-27 11:32:03 +00:00
|
|
|
|
m_MainSizer = new wxBoxSizer(wxVERTICAL);
|
2008-12-26 02:42:15 +00:00
|
|
|
|
m_MainSizer->Add(m_Notebook, 0, wxEXPAND | wxALL, 5);
|
|
|
|
|
m_MainSizer->Add(m_sButtons, 1, wxEXPAND | ( wxLEFT | wxRIGHT | wxBOTTOM), 5);
|
|
|
|
|
this->SetSizer(m_MainSizer);
|
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
// Debugging
|
|
|
|
|
// -----------------------------
|
2009-02-10 14:02:01 +00:00
|
|
|
|
#ifdef SHOW_PAD_STATUS
|
|
|
|
|
m_pStatusBar = new wxStaticText(this, IDT_DEBUGGING, wxT("Debugging"), wxPoint(135, 100), wxDefaultSize);
|
|
|
|
|
#endif
|
2009-01-21 18:09:31 +00:00
|
|
|
|
//m_pStatusBar2 = new wxStaticText(this, IDT_DEBUGGING2, wxT("Debugging2"), wxPoint(125, 200), wxDefaultSize);
|
2009-01-24 22:13:53 +00:00
|
|
|
|
//m_pStatusBar->SetLabel(wxString::Format("Debugging text"));
|
2009-01-22 19:53:16 +00:00
|
|
|
|
|
2009-01-24 22:17:51 +00:00
|
|
|
|
/*m_TCDebugging = new wxTextCtrl(this, IDT_DEBUGGING3, _T(""), wxDefaultPosition, wxSize(400, 400),
|
2009-01-21 18:09:31 +00:00
|
|
|
|
wxTE_RICH | wxTE_MULTILINE | wxTE_DONTWRAP | wxNO_BORDER);
|
|
|
|
|
wxBoxSizer * m_LogSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_LogSizer->Add(m_TCDebugging, 0, wxEXPAND | (wxALL), 0);
|
2009-01-24 22:17:51 +00:00
|
|
|
|
m_MainSizer->Add(m_LogSizer, 0, wxEXPAND | ( wxLEFT | wxRIGHT | wxBOTTOM), 5);*/
|
2008-12-27 11:32:03 +00:00
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
2008-12-26 02:42:15 +00:00
|
|
|
|
// Set window size
|
2008-12-27 11:32:03 +00:00
|
|
|
|
// -----------------------------
|
|
|
|
|
SizeWindow();
|
2008-12-26 02:42:15 +00:00
|
|
|
|
Center();
|
2009-01-21 18:09:31 +00:00
|
|
|
|
|
|
|
|
|
// All done
|
|
|
|
|
ControlsCreated = true;
|
2009-01-24 22:13:53 +00:00
|
|
|
|
|
2009-01-25 18:20:16 +00:00
|
|
|
|
// Replace the harder to understand -1 with "" for the sake of user friendliness
|
|
|
|
|
ToBlank();
|
2008-12-08 05:25:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-12-27 11:32:03 +00:00
|
|
|
|
void ConfigBox::SizeWindow()
|
2008-12-08 05:25:12 +00:00
|
|
|
|
{
|
2008-12-27 11:32:03 +00:00
|
|
|
|
SetClientSize(m_MainSizer->GetMinSize().GetWidth(), m_MainSizer->GetMinSize().GetHeight());
|
2008-12-08 05:25:12 +00:00
|
|
|
|
}
|