mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-12 00:59:11 +01:00
09b5dfbd53
autoconfiguration tests. Some versions of gcc care enough about ANSI C to complain about this. Use the Linux install hierarchy conventions on other Unices as well. XKeysymToString returns NULL on unknown keysyms, which is not a valid std::string initializer. There appears to be some disagreement regarding the second parameter to iconv(). Some versions/installations have it as const, others don't. Unfortunately, due to wonderful C++ brain damage, implicit conversion from const to non-const doesn't work here. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5945 8ced0084-cf51-0410-be5f-012b33b47a6e
113 lines
3.8 KiB
C++
113 lines
3.8 KiB
C++
|
|
#include "GeckoCodeDiag.h"
|
|
|
|
#define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s)
|
|
|
|
namespace Gecko
|
|
{
|
|
|
|
static const wxString wxstr_name(wxT("Name: ")),
|
|
wxstr_description(wxT("Description: ")),
|
|
wxstr_creator(wxT("Creator: "));
|
|
|
|
CodeConfigPanel::CodeConfigPanel(wxWindow* const parent)
|
|
: wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
|
|
{
|
|
m_listbox_gcodes = new wxCheckListBox(this, -1, wxDefaultPosition, wxDefaultSize);
|
|
_connect_macro_(m_listbox_gcodes, CodeConfigPanel::UpdateInfoBox, wxEVT_COMMAND_LISTBOX_SELECTED, this);
|
|
_connect_macro_(m_listbox_gcodes, CodeConfigPanel::ToggleCode, wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, this);
|
|
|
|
m_infobox.label_name = new wxStaticText(this, -1, wxstr_name);
|
|
m_infobox.label_creator = new wxStaticText(this, -1, wxstr_creator);
|
|
m_infobox.label_description = new wxStaticText(this, -1, wxstr_description);
|
|
m_infobox.listbox_codes = new wxListBox(this, -1, wxDefaultPosition, wxSize(-1, 64));
|
|
|
|
// TODO: buttons to add/edit codes
|
|
|
|
// sizers
|
|
wxBoxSizer* const sizer_infobox = new wxBoxSizer(wxVERTICAL);
|
|
sizer_infobox->Add(m_infobox.label_name, 0, wxLEFT | wxBOTTOM, 5);
|
|
sizer_infobox->Add(m_infobox.label_creator, 0, wxLEFT | wxBOTTOM, 5);
|
|
sizer_infobox->Add(m_infobox.label_description, 0, wxLEFT | wxBOTTOM, 5);
|
|
sizer_infobox->Add(m_infobox.listbox_codes, 0, wxLEFT | wxBOTTOM, 5);
|
|
|
|
//wxBoxSizer* const sizer_horz = new wxBoxSizer(wxHORIZONTAL);
|
|
//sizer_horz->Add(sizer_infobox, 1, 0);
|
|
|
|
// silly
|
|
//if (show_apply_button)
|
|
//{
|
|
// wxButton* const btn_apply = new wxButton(this, -1, wxT("Apply Changes"), wxDefaultPosition, wxSize(128, -1));
|
|
// _connect_macro_(btn_apply, CodeConfigPanel::ApplyChanges, wxEVT_COMMAND_BUTTON_CLICKED, this);
|
|
// sizer_horz->Add(btn_apply, 0, wxALIGN_RIGHT | wxALIGN_BOTTOM);
|
|
//}
|
|
|
|
wxBoxSizer* const sizer_main = new wxBoxSizer(wxVERTICAL);
|
|
sizer_main->Add(m_listbox_gcodes, 1, wxALL | wxEXPAND, 5);
|
|
sizer_main->Add(sizer_infobox, 0, wxALL | wxEXPAND, 5);
|
|
|
|
SetSizerAndFit(sizer_main);
|
|
}
|
|
|
|
void CodeConfigPanel::LoadCodes(const IniFile& inifile)
|
|
{
|
|
m_gcodes.clear();
|
|
Gecko::LoadCodes(inifile, m_gcodes);
|
|
|
|
m_listbox_gcodes->Clear();
|
|
// add the codes to the listbox
|
|
std::vector<GeckoCode>::const_iterator
|
|
gcodes_iter = m_gcodes.begin(),
|
|
gcodes_end = m_gcodes.end();
|
|
for (; gcodes_iter!=gcodes_end; ++gcodes_iter)
|
|
{
|
|
m_listbox_gcodes->Append(wxString::FromAscii(gcodes_iter->name.c_str()));
|
|
if (gcodes_iter->enabled)
|
|
m_listbox_gcodes->Check(m_listbox_gcodes->GetCount()-1, true);
|
|
}
|
|
|
|
wxCommandEvent evt;
|
|
UpdateInfoBox(evt);
|
|
}
|
|
|
|
void CodeConfigPanel::ToggleCode(wxCommandEvent& evt)
|
|
{
|
|
const int sel = evt.GetInt(); // this right?
|
|
if (sel > -1)
|
|
m_gcodes[sel].enabled = m_listbox_gcodes->IsChecked(sel);
|
|
}
|
|
|
|
void CodeConfigPanel::UpdateInfoBox(wxCommandEvent&)
|
|
{
|
|
m_infobox.listbox_codes->Clear();
|
|
const int sel = m_listbox_gcodes->GetSelection();
|
|
|
|
if (sel > -1)
|
|
{
|
|
m_infobox.label_name->SetLabel(wxstr_name + wxString::FromAscii(m_gcodes[sel].name.c_str()));
|
|
m_infobox.label_description->SetLabel(wxstr_description + wxString::FromAscii(m_gcodes[sel].description.c_str()));
|
|
m_infobox.label_creator->SetLabel(wxstr_creator + wxString::FromAscii(m_gcodes[sel].creator.c_str()));
|
|
|
|
// add codes to info listbox
|
|
std::vector<GeckoCode::Code>::const_iterator
|
|
codes_iter = m_gcodes[sel].codes.begin(),
|
|
codes_end = m_gcodes[sel].codes.end();
|
|
for (; codes_iter!=codes_end; ++codes_iter)
|
|
m_infobox.listbox_codes->Append(wxString::Format(wxT("%08X %08X"), codes_iter->address, codes_iter->data));
|
|
}
|
|
else
|
|
{
|
|
m_infobox.label_name->SetLabel(wxstr_name);
|
|
m_infobox.label_description->SetLabel(wxstr_description);
|
|
m_infobox.label_creator->SetLabel(wxstr_creator);
|
|
}
|
|
}
|
|
|
|
void CodeConfigPanel::ApplyChanges(wxCommandEvent&)
|
|
{
|
|
Gecko::SetActiveCodes(m_gcodes);
|
|
}
|
|
|
|
|
|
}
|