#ifndef _CONFIGBOX_H_ #define _CONFIGBOX_H_ #define SLIDER_TICK_COUNT 100 #define DETECT_WAIT_TIME 1500 #define PREVIEW_UPDATE_TIME 25 // might have to change this setup for wiimote #define PROFILES_PATH "Profiles/GCPad/" #include #include #include #include #include #include #include #include #include #include #include #include "ControllerInterface/ControllerInterface.h" #include "Config.h" #include "FileSearch.h" class PadSetting { protected: PadSetting( ControlState& _value ) : value(_value) {} public: virtual void UpdateGUI() = 0; virtual void UpdateValue() = 0; ControlState& value; }; class PadSettingChoice : public PadSetting, public wxChoice { public: PadSettingChoice( wxWindow* const parent, ControlState& _value, int min, int max ); void UpdateGUI(); void UpdateValue(); }; class PadSettingCheckBox : public PadSetting, public wxCheckBox { public: PadSettingCheckBox( wxWindow* const parent, ControlState& _value, const char* const label ); void UpdateGUI(); void UpdateValue(); }; class ControlChooser : public wxStaticBoxSizer { public: ControlChooser( wxWindow* const parent, ControllerInterface::ControlReference* const ref, wxWindow* const eventsink ); void UpdateGUI(); ControllerInterface::ControlReference* control_reference; wxTextCtrl* textctrl; wxListBox* control_lbox; wxChoice* mode_cbox; wxSlider* range_slider; private: wxStaticText* m_bound_label; }; class ControlList : public wxDialog { public: ControlList( wxWindow* const parent, ControllerInterface::ControlReference* const ref, ControlChooser* const chooser ); private: ControlChooser* const m_control_chooser; }; class ControlDialog : public wxDialog { public: ControlDialog( wxWindow* const parent, ControllerInterface::ControlReference* const ref, const std::vector& devs ); void SelectControl( wxCommandEvent& event ); ControllerInterface::ControlReference* const control_reference; wxComboBox* device_cbox; ControlChooser* control_chooser; }; class ControlButton : public wxButton { public: ControlButton( wxWindow* const parent, ControllerInterface::ControlReference* const _ref, const unsigned int width, const std::string& label = "" ); ControllerInterface::ControlReference* const control_reference; }; class ControlGroupBox : public wxStaticBoxSizer { public: ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWindow* const parent ); ControllerEmu::ControlGroup* control_group; wxStaticBitmap* static_bitmap; std::vector< PadSetting* > options; std::vector< wxButton* > controls; std::vector control_buttons; }; class ConfigDialog; class GamepadPage : public wxNotebookPage { friend class ConfigDialog; public: GamepadPage( wxWindow* parent, Plugin& plugin, const unsigned int pad_num, ConfigDialog* const config_dialog ); void UpdateGUI(); void RefreshDevices( wxCommandEvent& event ); void LoadProfile( wxCommandEvent& event ); void SaveProfile( wxCommandEvent& event ); void DeleteProfile( wxCommandEvent& event ); void ConfigControl( wxCommandEvent& event ); void ConfigDetectControl( wxCommandEvent& event ); void DetectControl( wxCommandEvent& event ); void ClearControl( wxCommandEvent& event ); void SetDevice( wxCommandEvent& event ); void SetControl( wxCommandEvent& event ); void ClearAll( wxCommandEvent& event ); void AdjustControlOption( wxCommandEvent& event ); void AdjustSetting( wxCommandEvent& event ); wxComboBox* profile_cbox; wxComboBox* device_cbox; std::vector control_groups; protected: ControllerEmu* const controller; private: ControlDialog* m_control_dialog; Plugin& m_plugin; ConfigDialog* const m_config_dialog; }; class ConfigDialog : public wxDialog { public: ConfigDialog( wxWindow* const parent, Plugin& plugin, const std::string& name, const bool _is_game_running ); ~ConfigDialog(); void ClickSave( wxCommandEvent& event ); void UpdateDeviceComboBox(); void UpdateProfileComboBox(); void UpdateControlReferences(); void UpdateBitmaps(wxTimerEvent&); const bool is_game_running; private: wxNotebook* m_pad_notebook; std::vector m_padpages; Plugin& m_plugin; wxTimer* m_update_timer; }; #endif