#include "UDPWrapper.h" #include #include #include const char* DefaultPort(const int index) { static std::string s; s = "443"; s += (char)('2' + index); return s.c_str(); } UDPWrapper::UDPWrapper(int indx, const char* const _name) : ControllerEmu::ControlGroup(_name,GROUP_TYPE_UDPWII), inst(NULL), index(indx), updIR(false),updAccel(false), updButt(false),udpEn(false) , port(DefaultPort(indx)) { //PanicAlert("UDPWrapper #%d ctor",index); } void UDPWrapper::LoadConfig(IniFile::Section *sec, const std::string& defdev, const std::string& base ) { ControlGroup::LoadConfig(sec,defdev,base); std::string group( base + name ); group += "/"; int _updAccel,_updIR,_updButt,_udpEn; sec->Get((group + "Enable").c_str(),&_udpEn, 0); sec->Get((group + "Port").c_str(), &port, DefaultPort(index)); sec->Get((group + "Update_Accel").c_str(), &_updAccel, 1); sec->Get((group + "Update_IR").c_str(), &_updIR, 1); sec->Get((group + "Update_Butt").c_str(), &_updButt, 1); udpEn=(_udpEn>0); updAccel=(_updAccel>0); updIR=(_updIR>0); updButt=(_updButt>0); Refresh(); } void UDPWrapper::SaveConfig(IniFile::Section *sec, const std::string& defdev, const std::string& base ) { ControlGroup::SaveConfig(sec,defdev,base); std::string group( base + name ); group += "/"; sec->Set((group + "Enable").c_str(), (int)udpEn, 0); sec->Set((group + "Port").c_str(), port, DefaultPort(index)); sec->Set((group + "Update_Accel").c_str(), (int)updAccel, 1); sec->Set((group + "Update_IR").c_str(), (int)updIR, 1); sec->Set((group + "Update_Butt").c_str(), (int)updButt, 1); } void UDPWrapper::Refresh() { bool udpAEn=(inst!=NULL); if (udpEn&&udpAEn) { if (strcmp(inst->getPort(),port.c_str())) { delete inst; inst= new UDPWiimote(port.c_str()); } return; } if (!udpEn) { if (inst) delete inst; inst=NULL; return; } //else inst= new UDPWiimote(port.c_str()); } UDPWrapper::~UDPWrapper() { if (inst) delete inst; } #if defined(HAVE_WX) && HAVE_WX #define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler( f ), (wxObject*)0, (wxEvtHandler*)s) class UDPConfigDiag : public wxDialog { public: UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp); UDPWrapper * wrp; void ChangeUpdateFlags(wxCommandEvent & event); void ChangeState(wxCommandEvent & event); void OKPressed(wxCommandEvent & event); wxCheckBox * enable; wxCheckBox * butt; wxCheckBox * accel; wxCheckBox * point; wxTextCtrl * port_tbox; }; UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) : wxDialog(parent, -1, wxT("UDP Wiimote"), wxDefaultPosition, wxDefaultSize), wrp(_wrp) { wxBoxSizer * outer_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer * sizer1 = new wxBoxSizer(wxVERTICAL); wxBoxSizer * sizer2 = new wxBoxSizer(wxVERTICAL); outer_sizer ->Add(sizer1, 0, wxUP | wxLEFT| wxRIGHT | wxEXPAND, 10); outer_sizer ->Add(sizer2, 1, wxALL | wxEXPAND, 10); enable = new wxCheckBox(this,wxID_ANY,wxT("Enable")); butt = new wxCheckBox(this,wxID_ANY,wxT("Update Buttons")); accel = new wxCheckBox(this,wxID_ANY,wxT("Update Acceleration")); point = new wxCheckBox(this,wxID_ANY,wxT("Update IR Pointer")); wxButton * ok_butt = new wxButton(this,wxID_ANY,wxT("OK")); wxBoxSizer * port_sizer = new wxBoxSizer(wxHORIZONTAL); port_sizer->Add(new wxStaticText(this , wxID_ANY, wxT("UDP Port:")),0,wxALIGN_CENTER); port_tbox = new wxTextCtrl(this,wxID_ANY,wxString::FromUTF8(wrp->port.c_str())); port_sizer->Add(port_tbox,1, wxLEFT | wxEXPAND , 5); _connect_macro_(enable,UDPConfigDiag::ChangeState ,wxEVT_COMMAND_CHECKBOX_CLICKED, this); _connect_macro_(butt,UDPConfigDiag::ChangeUpdateFlags ,wxEVT_COMMAND_CHECKBOX_CLICKED, this); _connect_macro_(accel,UDPConfigDiag::ChangeUpdateFlags ,wxEVT_COMMAND_CHECKBOX_CLICKED, this); _connect_macro_(point,UDPConfigDiag::ChangeUpdateFlags ,wxEVT_COMMAND_CHECKBOX_CLICKED, this); _connect_macro_(ok_butt,UDPConfigDiag::OKPressed, wxEVT_COMMAND_BUTTON_CLICKED, this); _connect_macro_(port_tbox, UDPConfigDiag::ChangeState, wxEVT_COMMAND_TEXT_UPDATED, this); enable->SetValue(wrp->udpEn); butt->SetValue(wrp->updButt); accel->SetValue(wrp->updAccel); point->SetValue(wrp->updIR); sizer1->Add(enable,1,wxALL | wxEXPAND,5); sizer1->Add(port_sizer, 1,wxDOWN | wxLEFT| wxRIGHT | wxEXPAND,5); sizer2->Add(butt,1,wxALL | wxEXPAND,5); sizer2->Add(accel,1,wxALL | wxEXPAND,5); sizer2->Add(point,1,wxALL | wxEXPAND,5); outer_sizer->Add(ok_butt,0, wxDOWN | wxLEFT| wxRIGHT | wxALIGN_RIGHT,10); SetSizerAndFit(outer_sizer); Layout(); } void UDPConfigDiag::ChangeUpdateFlags(wxCommandEvent & event) { wrp->updAccel=accel->GetValue(); wrp->updButt=butt->GetValue(); wrp->updIR=point->GetValue(); } void UDPConfigDiag::ChangeState(wxCommandEvent & event) { wrp->udpEn=enable->GetValue(); wrp->port=port_tbox->GetValue().mb_str(wxConvUTF8); wrp->Refresh(); } void UDPConfigDiag::OKPressed(wxCommandEvent & event) { Close(); } void UDPWrapper::Configure(wxWindow * parent) { wxDialog * diag = new UDPConfigDiag(parent,this); diag->Center(); diag->ShowModal(); diag->Destroy(); } #endif