2013-04-17 23:43:35 -04:00
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
2011-02-03 21:11:06 +00:00
2014-02-22 23:36:30 +01:00
#include <cstdio>
#include <string>
#include <wx/checkbox.h>
#include <wx/choice.h>
#include <wx/defs.h>
#include <wx/dialog.h>
#include <wx/event.h>
#include <wx/gdicmn.h>
#include <wx/sizer.h>
#include <wx/stattext.h>
#include <wx/string.h>
#include <wx/textctrl.h>
#include <wx/translation.h>
#include <wx/windowid.h>
2014-02-17 05:18:15 -05:00
#include "Common/CommonPaths.h"
2014-02-22 23:36:30 +01:00
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "DolphinWX/ISOProperties.h"
2014-02-17 05:18:15 -05:00
#include "DolphinWX/PHackSettings.h"
#include "DolphinWX/WxUtils.h"
2011-02-03 21:11:06 +00:00
2014-02-22 23:36:30 +01:00
class wxWindow ;
2011-02-03 21:11:06 +00:00
BEGIN_EVENT_TABLE ( CPHackSettings , wxDialog )
EVT_CHOICE ( ID_PHACK_CHOICE , CPHackSettings :: SetRefresh )
EVT_BUTTON ( wxID_OK , CPHackSettings :: SavePHackData )
END_EVENT_TABLE ()
CPHackSettings :: CPHackSettings ( wxWindow * parent , wxWindowID id , const wxString & title , const wxPoint & position , const wxSize & size , long style )
: wxDialog ( parent , id , title , position , size , style )
{
CreateGUIControls ();
2014-03-12 15:33:41 -04:00
std :: string _iniFilename = File :: GetSysDirectory () + GAMESETTINGS_DIR DIR_SEP "PH_PRESETS.ini" ;
PHPresetsIni . Load ( _iniFilename );
2013-09-07 23:02:49 +02:00
PHPresetsIni . SortSections ();
2011-02-03 21:11:06 +00:00
LoadPHackData ();
}
CPHackSettings ::~ CPHackSettings ()
{
}
void CPHackSettings :: CreateGUIControls ()
{
2011-03-17 04:26:01 +00:00
wxStaticText * PHackChoiceText = new wxStaticText ( this , wxID_ANY , _ ( "Presets: " ));
2011-05-31 19:58:15 +00:00
PHackChoice = new wxChoice ( this , ID_PHACK_CHOICE );
2011-02-03 21:11:06 +00:00
PHackChoice -> SetToolTip ( _ ( "Load preset values from hack patterns available." ));
2011-03-17 04:26:01 +00:00
wxStaticText * PHackZNearText = new wxStaticText ( this , wxID_ANY , _ ( "zNear Correction: " ));
PHackZNear = new wxTextCtrl ( this , ID_PHACK_ZNEAR );
2011-02-03 21:11:06 +00:00
PHackZNear -> SetToolTip ( _ ( "Adds the specified value to zNear Parameter. \n Two ways to express the floating point values. \n Example: entering ' \' 200' \' or ' \' 0.0002' \' directly, it produces equal effects, the acquired value will be ' \' 0.0002' \' . \n Values: (0->+/-Integer) or (0->+/-FP[6 digits of precision]) \n\n NOTE: Check LogWindow/Console for the acquired values." ));
2011-03-17 04:26:01 +00:00
PHackSZNear = new wxCheckBox ( this , ID_PHACK_SZNEAR , _ ( "(-)+zNear" ));
2011-02-03 21:11:06 +00:00
PHackSZNear -> SetToolTip ( _ ( "Changes sign to zNear Parameter (after correction)" ));
2011-03-17 04:26:01 +00:00
wxStaticText * PHackZFarText = new wxStaticText ( this , wxID_ANY , _ ( "zFar Correction: " ));
PHackZFar = new wxTextCtrl ( this , ID_PHACK_ZFAR );
2011-02-03 21:11:06 +00:00
PHackZFar -> SetToolTip ( _ ( "Adds the specified value to zFar Parameter. \n Two ways to express the floating point values. \n Example: entering ' \' 200' \' or ' \' 0.0002' \' directly, it produces equal effects, the acquired value will be ' \' 0.0002' \' . \n Values: (0->+/-Integer) or (0->+/-FP[6 digits of precision]) \n\n NOTE: Check LogWindow/Console for the acquired values." ));
2011-03-17 04:26:01 +00:00
PHackSZFar = new wxCheckBox ( this , ID_PHACK_SZFAR , _ ( "(-)+zFar" ));
2011-02-03 21:11:06 +00:00
PHackSZFar -> SetToolTip ( _ ( "Changes sign to zFar Parameter (after correction)" ));
wxStaticBoxSizer * sbPHackSettings = new wxStaticBoxSizer ( wxVERTICAL , this , _ ( "Parameters" ));
wxFlexGridSizer * szrPHackSettings = new wxFlexGridSizer ( 3 , 5 , 5 );
sbPHackSettings -> Add ( szrPHackSettings , 0 , wxEXPAND | wxLEFT | wxTOP , 5 );
szrPHackSettings -> Add ( PHackZNearText , 0 , wxALIGN_CENTER_VERTICAL );
szrPHackSettings -> Add ( PHackZNear , 1 , wxEXPAND );
szrPHackSettings -> Add ( PHackSZNear , 0 , wxEXPAND | wxLEFT , 5 );
szrPHackSettings -> Add ( PHackZFarText , 0 , wxALIGN_CENTER_VERTICAL );
szrPHackSettings -> Add ( PHackZFar , 1 , wxEXPAND );
szrPHackSettings -> Add ( PHackSZFar , 0 , wxEXPAND | wxLEFT , 5 );
wxBoxSizer * sPHack = new wxBoxSizer ( wxVERTICAL );
sPHack -> Add ( PHackChoiceText , 0 , wxEXPAND | wxLEFT | wxRIGHT | wxTOP , 5 );
sPHack -> Add ( PHackChoice , 0 , wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM , 5 );
sPHack -> Add ( sbPHackSettings , 0 , wxEXPAND | wxALL , 5 );
2011-03-17 04:26:01 +00:00
sPHack -> Add ( CreateButtonSizer ( wxOK | wxCANCEL ), 0 , wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM , 5 );
2011-02-03 21:11:06 +00:00
SetSizerAndFit ( sPHack );
2011-03-17 04:26:01 +00:00
SetFocus ();
2011-02-03 21:11:06 +00:00
}
void CPHackSettings :: LoadPHackData ()
{
std :: string sTemp ;
2014-03-16 18:42:56 -04:00
std :: string sIndex ;
2011-02-03 21:11:06 +00:00
PHackChoice -> Clear ();
2014-03-23 20:28:19 -05:00
PHackChoice -> Append ( _ ( "[Custom]" ));
2014-03-16 18:42:56 -04:00
for ( int i = 0 ; ; i ++ )
2011-02-03 21:11:06 +00:00
{
2014-03-16 18:42:56 -04:00
sIndex = std :: to_string ( i );
2011-02-03 21:11:06 +00:00
if ( ! PHPresetsIni . Exists ( sIndex , "Title" ))
break ;
2014-03-16 18:42:56 -04:00
2014-06-16 01:12:43 -04:00
PHPresetsIni . GetOrCreateSection ( sIndex ) -> Get ( "Title" , & sTemp );
2014-03-16 18:42:56 -04:00
2011-02-03 21:11:06 +00:00
if ( sTemp . empty ())
2014-03-16 18:42:56 -04:00
sTemp = WxStrToStr ( _ ( "(UNKNOWN)" ));
2011-02-03 21:11:06 +00:00
if ( i == 0 )
2014-03-23 20:28:19 -05:00
PHackChoice -> Append ( StrToWxStr ( "-------------" ));
2014-03-16 18:42:56 -04:00
2013-02-27 22:37:38 -06:00
PHackChoice -> Append ( StrToWxStr ( sTemp ));
2011-02-03 21:11:06 +00:00
}
PHackChoice -> Select ( 0 );
PHackSZNear -> Set3StateValue (( wxCheckBoxState ) PHack_Data . PHackSZNear );
PHackSZFar -> Set3StateValue (( wxCheckBoxState ) PHack_Data . PHackSZFar );
2013-02-27 22:37:38 -06:00
PHackZNear -> SetValue ( StrToWxStr ( PHack_Data . PHZNear ));
PHackZFar -> SetValue ( StrToWxStr ( PHack_Data . PHZFar ));
2011-02-03 21:11:06 +00:00
}
void CPHackSettings :: SetRefresh ( wxCommandEvent & event )
{
bool bTemp ;
std :: string sTemp ;
2014-03-16 18:42:56 -04:00
std :: string sIndex ;
2011-02-03 21:11:06 +00:00
int index = event . GetSelection ();
if ( index > 1 )
{
index -= 2 ;
2014-03-16 18:42:56 -04:00
sIndex = std :: to_string ( index );
2011-02-03 21:11:06 +00:00
2014-06-16 01:12:43 -04:00
IniFile :: Section * proj_hack = PHPresetsIni . GetOrCreateSection ( sIndex );
proj_hack -> Get ( "PH_SZNear" , & bTemp );
2011-02-03 21:11:06 +00:00
PHackSZNear -> Set3StateValue (( wxCheckBoxState ) bTemp );
2014-06-16 01:12:43 -04:00
proj_hack -> Get ( "PH_SZFar" , & bTemp );
2011-02-03 21:11:06 +00:00
PHackSZFar -> Set3StateValue (( wxCheckBoxState ) bTemp );
2014-06-16 01:12:43 -04:00
proj_hack -> Get ( "PH_ZNear" , & sTemp );
2013-02-27 22:37:38 -06:00
PHackZNear -> SetValue ( StrToWxStr ( sTemp ));
2014-06-16 01:12:43 -04:00
proj_hack -> Get ( "PH_ZFar" , & sTemp );
2013-02-27 22:37:38 -06:00
PHackZFar -> SetValue ( StrToWxStr ( sTemp ));
2011-02-03 21:11:06 +00:00
}
}
2011-03-17 04:26:01 +00:00
void CPHackSettings :: SavePHackData ( wxCommandEvent & event )
2011-02-03 21:11:06 +00:00
{
PHack_Data . PHackSZNear = PHackSZNear -> GetValue ();
PHack_Data . PHackSZFar = PHackSZFar -> GetValue ();
PHack_Data . PHZNear = PHackZNear -> GetValue (). char_str ();
PHack_Data . PHZFar = PHackZFar -> GetValue (). char_str ();
AcceptAndClose ();
2011-03-17 04:26:01 +00:00
event . Skip ();
2011-02-03 21:11:06 +00:00
}