Moved default joypad selection to the joypad config dialog.

git-svn-id: https://svn.code.sf.net/p/vbam/code/trunk@719 a31d4220-a93d-0410-bf67-fe4944624d44
This commit is contained in:
bgk 2008-09-13 15:51:06 +00:00
parent bd6554a2a9
commit d5881c625e
8 changed files with 38 additions and 73 deletions

View File

@ -45,6 +45,7 @@ JoypadConfigDialog::JoypadConfigDialog() :
Gtk::Dialog("Joypad config", true, true), Gtk::Dialog("Joypad config", true, true),
m_oTitleHBox(false, 5), m_oTitleHBox(false, 5),
m_oTitleLabel("Joypad :", Gtk::ALIGN_RIGHT), m_oTitleLabel("Joypad :", Gtk::ALIGN_RIGHT),
m_oDefaultJoypad("Default joypad"),
m_oTable(G_N_ELEMENTS(m_astKeys), 2, false), m_oTable(G_N_ELEMENTS(m_astKeys), 2, false),
m_ePad(PAD_MAIN) m_ePad(PAD_MAIN)
{ {
@ -78,14 +79,17 @@ JoypadConfigDialog::JoypadConfigDialog() :
m_oTitleHBox.set_border_width(5); m_oTitleHBox.set_border_width(5);
m_oTable.set_border_width(5); m_oTable.set_border_width(5);
m_oTable.set_spacings(5); m_oTable.set_spacings(5);
get_vbox()->set_spacing(5);
get_vbox()->pack_start(m_oTitleHBox); get_vbox()->pack_start(m_oTitleHBox);
get_vbox()->pack_start(m_oSeparator); get_vbox()->pack_start(m_oSeparator);
get_vbox()->pack_start(m_oDefaultJoypad);
get_vbox()->pack_start(m_oTable); get_vbox()->pack_start(m_oTable);
// Signals and default values // Signals and default values
m_oConfigSig = Glib::signal_idle().connect(sigc::mem_fun(*this, &JoypadConfigDialog::bOnConfigIdle), m_oConfigSig = Glib::signal_idle().connect(sigc::mem_fun(*this, &JoypadConfigDialog::bOnConfigIdle),
Glib::PRIORITY_DEFAULT_IDLE); Glib::PRIORITY_DEFAULT_IDLE);
m_oDefaultJoypad.signal_toggled().connect(sigc::mem_fun(*this,
&JoypadConfigDialog::vOnDefaultJoypadSelect) );
m_oTitleCombo.signal_changed().connect(sigc::mem_fun(*this, m_oTitleCombo.signal_changed().connect(sigc::mem_fun(*this,
&JoypadConfigDialog::vOnJoypadSelect) ); &JoypadConfigDialog::vOnJoypadSelect) );
m_oTitleCombo.set_active_text("1"); m_oTitleCombo.set_active_text("1");
@ -100,6 +104,8 @@ JoypadConfigDialog::~JoypadConfigDialog()
void JoypadConfigDialog::vUpdateEntries() void JoypadConfigDialog::vUpdateEntries()
{ {
m_oDefaultJoypad.set_active(inputGetDefaultJoypad() == m_ePad);
for (guint i = 0; i < m_oEntries.size(); i++) for (guint i = 0; i < m_oEntries.size(); i++)
{ {
const char * csName = 0; const char * csName = 0;
@ -267,4 +273,16 @@ void JoypadConfigDialog::vOnJoypadSelect()
vUpdateEntries(); vUpdateEntries();
} }
void JoypadConfigDialog::vOnDefaultJoypadSelect()
{
if (m_oDefaultJoypad.get_active())
{
inputSetDefaultJoypad(m_ePad);
}
else
{
inputSetDefaultJoypad(PAD_MAIN);
}
}
} // namespace VBA } // namespace VBA

View File

@ -28,6 +28,7 @@
#include <gtkmm/entry.h> #include <gtkmm/entry.h>
#include <gtkmm/comboboxtext.h> #include <gtkmm/comboboxtext.h>
#include <gtkmm/separator.h> #include <gtkmm/separator.h>
#include <gtkmm/checkbutton.h>
#include "../sdl/inputSDL.h" #include "../sdl/inputSDL.h"
@ -58,6 +59,7 @@ private:
Gtk::Label m_oTitleLabel; Gtk::Label m_oTitleLabel;
Gtk::ComboBoxText m_oTitleCombo; Gtk::ComboBoxText m_oTitleCombo;
Gtk::HSeparator m_oSeparator; Gtk::HSeparator m_oSeparator;
Gtk::CheckButton m_oDefaultJoypad;
Gtk::Table m_oTable; Gtk::Table m_oTable;
Gtk::Button * m_poOkButton; Gtk::Button * m_poOkButton;
std::vector<Gtk::Entry *> m_oEntries; std::vector<Gtk::Entry *> m_oEntries;
@ -69,6 +71,7 @@ private:
bool bOnConfigIdle(); bool bOnConfigIdle();
void vOnJoypadSelect(); void vOnJoypadSelect();
void vOnDefaultJoypadSelect();
void vUpdateEntries(); void vUpdateEntries();
void vEmptyEventQueue(); void vEmptyEventQueue();
}; };

View File

@ -1044,48 +1044,6 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
</widget> </widget>
</child> </child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator18">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkRadioMenuItem" id="Joypad1">
<property name="visible">True</property>
<property name="label" translatable="yes">_1</property>
<property name="use_underline">True</property>
<property name="active">True</property>
</widget>
</child>
<child>
<widget class="GtkRadioMenuItem" id="Joypad2">
<property name="visible">True</property>
<property name="label" translatable="yes">_2</property>
<property name="use_underline">True</property>
<property name="group">Joypad1</property>
</widget>
</child>
<child>
<widget class="GtkRadioMenuItem" id="Joypad3">
<property name="visible">True</property>
<property name="label" translatable="yes">_3</property>
<property name="use_underline">True</property>
<property name="group">Joypad1</property>
</widget>
</child>
<child>
<widget class="GtkRadioMenuItem" id="Joypad4">
<property name="visible">True</property>
<property name="label" translatable="yes">_4</property>
<property name="use_underline">True</property>
<property name="group">Joypad1</property>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator24">
<property name="visible">True</property>
</widget>
</child>
<child> <child>
<widget class="GtkMenuItem" id="AutofireMenu"> <widget class="GtkMenuItem" id="AutofireMenu">
<property name="visible">True</property> <property name="visible">True</property>

View File

@ -614,22 +614,8 @@ Window::Window(GtkWindow * _pstWindow, const Glib::RefPtr<Xml> & _poXml) :
poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget("JoypadConfigure")); poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget("JoypadConfigure"));
poMI->signal_activate().connect(sigc::mem_fun(*this, &Window::vOnJoypadConfigure)); poMI->signal_activate().connect(sigc::mem_fun(*this, &Window::vOnJoypadConfigure));
int iDefaultJoypad = m_poInputConfig->oGetKey<int>("active_joypad"); EPad eDefaultJoypad = (EPad)m_poInputConfig->oGetKey<int>("active_joypad");
for (int i = m_iJoypadMin; i <= m_iJoypadMax; i++) inputSetDefaultJoypad(eDefaultJoypad);
{
char csName[20];
snprintf(csName, sizeof(csName), "Joypad%d", i + 1);
poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(csName));
if (i == iDefaultJoypad)
{
poCMI->set_active();
vOnJoypadToggled(poCMI, (EPad)iDefaultJoypad);
}
poCMI->signal_toggled().connect(sigc::bind(
sigc::mem_fun(*this, &Window::vOnJoypadToggled),
poCMI, (EPad)i));
}
// Autofire menu // Autofire menu
// //

View File

@ -160,7 +160,6 @@ protected:
virtual void vOnFilter2xToggled(Gtk::CheckMenuItem * _poCMI, int _iFilter2x); virtual void vOnFilter2xToggled(Gtk::CheckMenuItem * _poCMI, int _iFilter2x);
virtual void vOnFilterIBToggled(Gtk::CheckMenuItem * _poCMI, int _iFilterIB); virtual void vOnFilterIBToggled(Gtk::CheckMenuItem * _poCMI, int _iFilterIB);
virtual void vOnJoypadConfigure(); virtual void vOnJoypadConfigure();
virtual void vOnJoypadToggled(Gtk::CheckMenuItem * _poCMI, EPad _eJoypad);
virtual void vOnAutofireToggled(Gtk::CheckMenuItem * _poCMI, EKey _eKey); virtual void vOnAutofireToggled(Gtk::CheckMenuItem * _poCMI, EKey _eKey);
virtual void vOnHelpAbout(); virtual void vOnHelpAbout();
virtual bool bOnEmuIdle(); virtual bool bOnEmuIdle();

View File

@ -641,18 +641,8 @@ void Window::vOnJoypadConfigure()
JoypadConfigDialog oDialog; JoypadConfigDialog oDialog;
oDialog.set_transient_for(*this); oDialog.set_transient_for(*this);
oDialog.run(); oDialog.run();
}
void Window::vOnJoypadToggled(Gtk::CheckMenuItem * _poCMI, EPad _eJoypad) m_poInputConfig->vSetKey("active_joypad", inputGetDefaultJoypad());
{
if (! _poCMI->get_active())
{
return;
}
inputSetDefaultJoypad(_eJoypad);
m_poInputConfig->vSetKey("active_joypad", _eJoypad);
} }
void Window::vOnAutofireToggled(Gtk::CheckMenuItem * _poCMI, EKey _eKey) void Window::vOnAutofireToggled(Gtk::CheckMenuItem * _poCMI, EKey _eKey)

View File

@ -600,3 +600,8 @@ void inputSetDefaultJoypad(EPad pad)
{ {
sdlDefaultJoypad = pad; sdlDefaultJoypad = pad;
} }
EPad inputGetDefaultJoypad()
{
return sdlDefaultJoypad;
}

View File

@ -128,8 +128,14 @@ int inputGetSensorY();
/** /**
* Set which joypad configuration use when the core doesn't ask for a specific * Set which joypad configuration use when the core doesn't ask for a specific
* pad * @param pad Default pad
*/ */
void inputSetDefaultJoypad(EPad pad); void inputSetDefaultJoypad(EPad pad);
/**
* Get the default joypad
* pad
*/
EPad inputGetDefaultJoypad();
#endif // VBAM_SDL_INPUT_H #endif // VBAM_SDL_INPUT_H