2012-11-15 00:39:56 +01:00
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "Ini.h"
|
|
|
|
|
|
2014-02-21 17:13:57 +01:00
|
|
|
#ifdef _WIN32
|
2012-11-15 00:39:56 +01:00
|
|
|
#include <wx/msw/iniconf.h>
|
2014-02-21 17:13:57 +01:00
|
|
|
#endif
|
2012-11-15 00:39:56 +01:00
|
|
|
|
|
|
|
|
Inis Ini;
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
static bool StringToBool(const wxString& str)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
2013-08-03 11:40:03 +02:00
|
|
|
if(
|
|
|
|
|
!str.CmpNoCase("enable") ||
|
|
|
|
|
!str.CmpNoCase("e") ||
|
|
|
|
|
!str.CmpNoCase("1") ||
|
|
|
|
|
!str.CmpNoCase("true") ||
|
|
|
|
|
!str.CmpNoCase("t") )
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static wxString BoolToString(const bool b)
|
|
|
|
|
{
|
2013-08-10 23:51:24 +02:00
|
|
|
if(b) return "true";
|
2012-11-15 00:39:56 +01:00
|
|
|
|
2013-08-10 23:51:24 +02:00
|
|
|
return "false";
|
2012-11-15 00:39:56 +01:00
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
static wxSize StringToSize(const wxString& str)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
wxSize ret;
|
|
|
|
|
|
|
|
|
|
wxString s[2] = {wxEmptyString};
|
|
|
|
|
|
|
|
|
|
for(uint i=0, a=0; i<str.Length(); ++i)
|
|
|
|
|
{
|
|
|
|
|
if(!str(i, 1).CmpNoCase("x"))
|
|
|
|
|
{
|
|
|
|
|
if(++a >= 2) return wxDefaultSize;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s[a] += str(i, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(s[0].IsEmpty() || s[1].IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
return wxDefaultSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s[0].ToLong((long*)&ret.x);
|
|
|
|
|
s[1].ToLong((long*)&ret.y);
|
|
|
|
|
|
|
|
|
|
if(ret.x <= 0 || ret.y <= 0)
|
|
|
|
|
{
|
|
|
|
|
return wxDefaultSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
static wxString SizeToString(const wxSize& size)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return wxString::Format("%dx%d", size.x, size.y);
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
static wxPoint StringToPosition(const wxString& str)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
wxPoint ret;
|
|
|
|
|
|
|
|
|
|
wxString s[2] = {wxEmptyString};
|
|
|
|
|
|
|
|
|
|
for(uint i=0, a=0; i<str.Length(); ++i)
|
|
|
|
|
{
|
|
|
|
|
if(!str(i, 1).CmpNoCase("x"))
|
|
|
|
|
{
|
|
|
|
|
if(++a >= 2) return wxDefaultPosition;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s[a] += str(i, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(s[0].IsEmpty() || s[1].IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
return wxDefaultPosition;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s[0].ToLong((long*)&ret.x);
|
|
|
|
|
s[1].ToLong((long*)&ret.y);
|
|
|
|
|
|
|
|
|
|
if(ret.x <= 0 || ret.y <= 0)
|
|
|
|
|
{
|
|
|
|
|
return wxDefaultPosition;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
static wxString PositionToString(const wxPoint& position)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return wxString::Format("%dx%d", position.x, position.y);
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
static WindowInfo StringToWindowInfo(const wxString& str)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
WindowInfo ret = WindowInfo(wxDefaultSize, wxDefaultPosition);
|
|
|
|
|
|
|
|
|
|
wxString s[4] = {wxEmptyString};
|
|
|
|
|
|
|
|
|
|
for(uint i=0, a=0; i<str.Length(); ++i)
|
|
|
|
|
{
|
|
|
|
|
if(!str(i, 1).CmpNoCase("x") || !str(i, 1).CmpNoCase(":"))
|
|
|
|
|
{
|
|
|
|
|
if(++a >= 4) return WindowInfo::GetDefault();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s[a] += str(i, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(s[0].IsEmpty() || s[1].IsEmpty() || s[2].IsEmpty() || s[3].IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
return WindowInfo::GetDefault();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s[0].ToLong((long*)&ret.size.x);
|
|
|
|
|
s[1].ToLong((long*)&ret.size.y);
|
|
|
|
|
s[2].ToLong((long*)&ret.position.x);
|
|
|
|
|
s[3].ToLong((long*)&ret.position.y);
|
|
|
|
|
|
|
|
|
|
if(ret.size.x <= 0 || ret.size.y <= 0)
|
|
|
|
|
{
|
|
|
|
|
return WindowInfo::GetDefault();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
static wxString WindowInfoToString(const WindowInfo& wind)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
const int px = wind.position.x < -wind.size.x ? -1 : wind.position.x;
|
|
|
|
|
const int py = wind.position.y < -wind.size.y ? -1 : wind.position.y;
|
|
|
|
|
return wxString::Format("%dx%d:%dx%d", wind.size.x, wind.size.y, px, py);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Ini
|
|
|
|
|
Ini::Ini()
|
|
|
|
|
{
|
2014-02-21 17:13:57 +01:00
|
|
|
#ifdef _WIN32
|
2012-11-15 00:39:56 +01:00
|
|
|
m_Config = new wxIniConfig( wxEmptyString, wxEmptyString,
|
2014-03-11 17:36:17 +01:00
|
|
|
wxGetCwd() + "/rpcs3.ini",
|
2012-11-15 00:39:56 +01:00
|
|
|
wxEmptyString, wxCONFIG_USE_LOCAL_FILE );
|
2014-02-21 17:13:57 +01:00
|
|
|
#else
|
2014-02-23 17:52:52 +01:00
|
|
|
m_Config = new wxConfig("rpcs3");
|
2014-02-21 17:13:57 +01:00
|
|
|
#endif
|
2012-11-15 00:39:56 +01:00
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
void Ini::Save(const wxString& key, int value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
m_Config->Write(key, value);
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
void Ini::Save(const wxString& key, bool value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
m_Config->Write(key, BoolToString(value));
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
void Ini::Save(const wxString& key, wxSize value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
m_Config->Write(key, SizeToString(value));
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
void Ini::Save(const wxString& key, wxPoint value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
m_Config->Write(key, PositionToString(value));
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
void Ini::Save(const wxString& key, wxString value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
m_Config->Write(key, value);
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
void Ini::Save(const wxString& key, WindowInfo value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
m_Config->Write(key, WindowInfoToString(value));
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
int Ini::Load(const wxString& key, const int def_value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return m_Config->Read(key, def_value);
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
bool Ini::Load(const wxString& key, const bool def_value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return StringToBool(m_Config->Read(key, BoolToString(def_value)));
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
wxSize Ini::Load(const wxString& key, const wxSize def_value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return StringToSize(m_Config->Read(key, SizeToString(def_value)));
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
wxPoint Ini::Load(const wxString& key, const wxPoint def_value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return StringToPosition(m_Config->Read(key, PositionToString(def_value)));
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
wxString Ini::Load(const wxString& key, const wxString& def_value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return m_Config->Read(key, def_value);
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-25 00:53:14 +01:00
|
|
|
WindowInfo Ini::Load(const wxString& key, const WindowInfo& def_value)
|
2012-11-15 00:39:56 +01:00
|
|
|
{
|
|
|
|
|
return StringToWindowInfo(m_Config->Read(key, WindowInfoToString(def_value)));
|
2014-02-21 17:13:57 +01:00
|
|
|
}
|