354 lines
13 KiB
C++
354 lines
13 KiB
C++
/****************************************************************************
|
|
* *
|
|
* Project64 - A Nintendo 64 emulator. *
|
|
* http://www.pj64-emu.com/ *
|
|
* Copyright (C) 2012 Project64. All rights reserved. *
|
|
* *
|
|
* License: *
|
|
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
|
|
* *
|
|
****************************************************************************/
|
|
#include "stdafx.h"
|
|
|
|
#include "SettingsPage.h"
|
|
|
|
COptionsDirectoriesPage::COptionsDirectoriesPage(HWND hParent, const RECT & rcDispay) :
|
|
m_InUpdateSettings(false)
|
|
{
|
|
Create(hParent);
|
|
if (m_hWnd == NULL)
|
|
{
|
|
return;
|
|
}
|
|
SetWindowPos(HWND_TOP, &rcDispay, SWP_HIDEWINDOW);
|
|
|
|
m_PluginGroup.Attach(GetDlgItem(IDC_DIR_FRAME1));
|
|
m_AutoSaveGroup.Attach(GetDlgItem(IDC_DIR_FRAME3));
|
|
m_InstantSaveGroup.Attach(GetDlgItem(IDC_DIR_FRAME4));
|
|
m_ScreenShotGroup.Attach(GetDlgItem(IDC_DIR_FRAME5));
|
|
m_TextureGroup.Attach(GetDlgItem(IDC_DIR_TEXTURE_FRAME));
|
|
|
|
m_PluginDir.Attach(GetDlgItem(IDC_PLUGIN_DIR));
|
|
m_AutoSaveDir.Attach(GetDlgItem(IDC_AUTO_DIR));
|
|
m_InstantSaveDir.Attach(GetDlgItem(IDC_INSTANT_DIR));
|
|
m_ScreenShotDir.Attach(GetDlgItem(IDC_SNAP_DIR));
|
|
m_TextureDir.Attach(GetDlgItem(IDC_TEXTURE_DIR));
|
|
|
|
m_PluginDefault.Attach(GetDlgItem(IDC_PLUGIN_DEFAULT));
|
|
m_PluginSelected.Attach(GetDlgItem(IDC_PLUGIN_OTHER));
|
|
m_AutoSaveDefault.Attach(GetDlgItem(IDC_AUTO_DEFAULT));
|
|
m_AutoSaveSelected.Attach(GetDlgItem(IDC_AUTO_OTHER));
|
|
m_InstantDefault.Attach(GetDlgItem(IDC_INSTANT_DEFAULT));
|
|
m_InstantSelected.Attach(GetDlgItem(IDC_INSTANT_OTHER));
|
|
m_ScreenShotDefault.Attach(GetDlgItem(IDC_SNAP_DEFAULT));
|
|
m_ScreenShotSelected.Attach(GetDlgItem(IDC_SNAP_OTHER));
|
|
m_TextureDefault.Attach(GetDlgItem(IDC_TEXTURE_DEFAULT));
|
|
m_TextureSelected.Attach(GetDlgItem(IDC_TEXTURE_OTHER));
|
|
|
|
//Set Text language for the dialog box
|
|
::SetWindowTextW(m_PluginGroup.m_hWnd, wGS(DIR_PLUGIN).c_str());
|
|
::SetWindowTextW(m_AutoSaveGroup.m_hWnd, wGS(DIR_AUTO_SAVE).c_str());
|
|
::SetWindowTextW(m_InstantSaveGroup.m_hWnd, wGS(DIR_INSTANT_SAVE).c_str());
|
|
::SetWindowTextW(m_ScreenShotGroup.m_hWnd, wGS(DIR_SCREEN_SHOT).c_str());
|
|
::SetWindowTextW(m_TextureGroup.m_hWnd, wGS(DIR_TEXTURE).c_str());
|
|
|
|
UpdatePageSettings();
|
|
}
|
|
|
|
int CALLBACK COptionsDirectoriesPage::SelectDirCallBack(HWND hwnd, DWORD uMsg, DWORD /*lp*/, DWORD lpData)
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
case BFFM_INITIALIZED:
|
|
// WParam is TRUE since you are passing a path.
|
|
// It would be FALSE if you were passing a pidl.
|
|
if (lpData)
|
|
{
|
|
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
|
|
}
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void COptionsDirectoriesPage::SelectDirectory(LanguageStringID Title, CModifiedEditBox & EditBox, CModifiedButton & Default, CModifiedButton & selected)
|
|
{
|
|
wchar_t Buffer[MAX_PATH], Directory[MAX_PATH];
|
|
LPITEMIDLIST pidl;
|
|
BROWSEINFOW bi;
|
|
|
|
stdstr InitialDir = EditBox.GetWindowText();
|
|
std::wstring wTitle = wGS(Title);
|
|
bi.hwndOwner = m_hWnd;
|
|
bi.pidlRoot = NULL;
|
|
bi.pszDisplayName = Buffer;
|
|
bi.lpszTitle = wTitle.c_str();
|
|
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
|
|
bi.lpfn = (BFFCALLBACK)SelectDirCallBack;
|
|
bi.lParam = (DWORD)InitialDir.c_str();
|
|
if ((pidl = SHBrowseForFolderW(&bi)) != NULL)
|
|
{
|
|
if (SHGetPathFromIDListW(pidl, Directory))
|
|
{
|
|
stdstr path;
|
|
CPath SelectedDir(path.FromUTF16(Directory), "");
|
|
EditBox.SetChanged(true);
|
|
EditBox.SetWindowText(stdstr((const char *)SelectedDir).ToUTF16().c_str());
|
|
Default.SetChanged(true);
|
|
Default.SetCheck(BST_UNCHECKED);
|
|
selected.SetCheck(BM_SETCHECK);
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void COptionsDirectoriesPage::PluginDirChanged(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
if (m_InUpdateSettings) { return; }
|
|
m_PluginDir.SetChanged(true);
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::AutoSaveDirChanged(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
if (m_InUpdateSettings) { return; }
|
|
m_AutoSaveDir.SetChanged(true);
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::InstantSaveDirChanged(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
if (m_InUpdateSettings) { return; }
|
|
m_InstantSaveDir.SetChanged(true);
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::SnapShotDirChanged(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
if (m_InUpdateSettings) { return; }
|
|
m_ScreenShotDir.SetChanged(true);
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::TextureDirChanged(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
if (m_InUpdateSettings) { return; }
|
|
m_TextureDir.SetChanged(true);
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::SelectPluginDir(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
SelectDirectory(DIR_SELECT_PLUGIN, m_PluginDir, m_PluginDefault, m_PluginSelected);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::SelectAutoDir(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
SelectDirectory(DIR_SELECT_AUTO, m_AutoSaveDir, m_AutoSaveDefault, m_AutoSaveSelected);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::SelectInstantDir(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
SelectDirectory(DIR_SELECT_INSTANT, m_InstantSaveDir, m_InstantDefault, m_InstantSelected);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::SelectSnapShotDir(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
SelectDirectory(DIR_SELECT_SCREEN, m_ScreenShotDir, m_ScreenShotDefault, m_ScreenShotSelected);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::SelectTextureDir(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
{
|
|
SelectDirectory(DIR_SELECT_TEXTURE, m_TextureDir, m_TextureDefault, m_TextureSelected);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::UpdatePageSettings()
|
|
{
|
|
stdstr Directory;
|
|
|
|
m_InUpdateSettings = true;
|
|
m_PluginDir.SetChanged(g_Settings->LoadStringVal(Directory_PluginSelected, Directory));
|
|
m_PluginDir.SetWindowText(Directory.ToUTF16().c_str());
|
|
m_AutoSaveDir.SetChanged(g_Settings->LoadStringVal(Directory_NativeSaveSelected, Directory));
|
|
m_AutoSaveDir.SetWindowText(Directory.ToUTF16().c_str());
|
|
m_InstantSaveDir.SetChanged(g_Settings->LoadStringVal(Directory_InstantSaveSelected, Directory));
|
|
m_InstantSaveDir.SetWindowText(Directory.ToUTF16().c_str());
|
|
m_ScreenShotDir.SetChanged(g_Settings->LoadStringVal(Directory_SnapShotSelected, Directory));
|
|
m_ScreenShotDir.SetWindowText(Directory.ToUTF16().c_str());
|
|
m_TextureDir.SetChanged(g_Settings->LoadStringVal(Directory_TextureSelected, Directory));
|
|
m_TextureDir.SetWindowText(Directory.ToUTF16().c_str());
|
|
|
|
bool UseSelected;
|
|
m_PluginDefault.SetChanged(g_Settings->LoadBool(Directory_PluginUseSelected, UseSelected));
|
|
m_PluginDefault.SetCheck(!UseSelected);
|
|
m_PluginSelected.SetCheck(UseSelected);
|
|
|
|
m_AutoSaveDefault.SetChanged(g_Settings->LoadBool(Directory_NativeSaveUseSelected, UseSelected));
|
|
m_AutoSaveDefault.SetCheck(!UseSelected);
|
|
m_AutoSaveSelected.SetCheck(UseSelected);
|
|
|
|
m_InstantDefault.SetChanged(g_Settings->LoadBool(Directory_InstantSaveUseSelected, UseSelected));
|
|
m_InstantDefault.SetCheck(!UseSelected);
|
|
m_InstantSelected.SetCheck(UseSelected);
|
|
|
|
m_ScreenShotDefault.SetChanged(g_Settings->LoadBool(Directory_SnapShotUseSelected, UseSelected));
|
|
m_ScreenShotDefault.SetCheck(!UseSelected);
|
|
m_ScreenShotSelected.SetCheck(UseSelected);
|
|
|
|
m_TextureDefault.SetChanged(g_Settings->LoadBool(Directory_TextureUseSelected, UseSelected));
|
|
m_TextureDefault.SetCheck(!UseSelected);
|
|
m_TextureSelected.SetCheck(UseSelected);
|
|
|
|
m_InUpdateSettings = false;
|
|
}
|
|
|
|
void COptionsDirectoriesPage::UseSelectedClicked(UINT /*Code*/, int id, HWND /*ctl*/)
|
|
{
|
|
CModifiedButton * Button = NULL;
|
|
switch (id)
|
|
{
|
|
case IDC_PLUGIN_DEFAULT: Button = &m_PluginDefault; break;
|
|
case IDC_PLUGIN_OTHER: Button = &m_PluginDefault; break;
|
|
case IDC_AUTO_DEFAULT: Button = &m_AutoSaveDefault; break;
|
|
case IDC_AUTO_OTHER: Button = &m_AutoSaveDefault; break;
|
|
case IDC_INSTANT_DEFAULT: Button = &m_InstantDefault; break;
|
|
case IDC_INSTANT_OTHER: Button = &m_InstantDefault; break;
|
|
case IDC_SNAP_DEFAULT: Button = &m_ScreenShotDefault; break;
|
|
case IDC_SNAP_OTHER: Button = &m_ScreenShotDefault; break;
|
|
case IDC_TEXTURE_DEFAULT: Button = &m_TextureDefault; break;
|
|
case IDC_TEXTURE_OTHER: Button = &m_TextureDefault; break;
|
|
}
|
|
|
|
if (Button == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!Button->IsChanged() || Button->IsReset())
|
|
{
|
|
if ((int)Button->GetMenu() == id)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
Button->SetChanged(true);
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::HidePage()
|
|
{
|
|
ShowWindow(SW_HIDE);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::ShowPage()
|
|
{
|
|
ShowWindow(SW_SHOW);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::ResetDirectory(CModifiedEditBox & EditBox, SettingID Type)
|
|
{
|
|
if (!EditBox.IsChanged())
|
|
{
|
|
return;
|
|
}
|
|
stdstr dir;
|
|
g_Settings->LoadDefaultString(Type, dir);
|
|
EditBox.SetWindowText(dir.ToUTF16().c_str());
|
|
EditBox.SetReset(true);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::ResetDefaultSelected(CModifiedButton & ButtonDefault, CModifiedButton & ButtonSelected, SettingID Type)
|
|
{
|
|
if (!ButtonDefault.IsChanged())
|
|
{
|
|
return;
|
|
}
|
|
bool UseSelected;
|
|
g_Settings->LoadDefaultBool(Type, UseSelected);
|
|
ButtonDefault.SetCheck(!UseSelected);
|
|
ButtonSelected.SetCheck(UseSelected);
|
|
ButtonDefault.SetReset(true);
|
|
}
|
|
|
|
void COptionsDirectoriesPage::UpdateDirectory(CModifiedEditBox & EditBox, SettingID Type)
|
|
{
|
|
if (EditBox.IsChanged())
|
|
{
|
|
stdstr dir = EditBox.GetWindowText();
|
|
g_Settings->SaveString(Type, dir.c_str());
|
|
}
|
|
if (EditBox.IsReset())
|
|
{
|
|
g_Settings->DeleteSetting(Type);
|
|
}
|
|
}
|
|
|
|
void COptionsDirectoriesPage::UpdateDefaultSelected(CModifiedButton & Button, SettingID Type)
|
|
{
|
|
if (Button.IsChanged())
|
|
{
|
|
bool bUseSelected = (Button.GetCheck() & BST_CHECKED) == 0;
|
|
g_Settings->SaveBool(Type, bUseSelected);
|
|
|
|
if (Type == Directory_TextureUseSelected && !bUseSelected)
|
|
{
|
|
g_Settings->DeleteSetting(Directory_TextureSelected);
|
|
}
|
|
}
|
|
if (Button.IsReset())
|
|
{
|
|
g_Settings->DeleteSetting(Type);
|
|
}
|
|
}
|
|
|
|
void COptionsDirectoriesPage::ApplySettings(bool UpdateScreen)
|
|
{
|
|
UpdateDirectory(m_PluginDir, Directory_PluginSelected);
|
|
UpdateDirectory(m_AutoSaveDir, Directory_NativeSaveSelected);
|
|
UpdateDirectory(m_InstantSaveDir, Directory_InstantSaveSelected);
|
|
UpdateDirectory(m_ScreenShotDir, Directory_SnapShotSelected);
|
|
UpdateDirectory(m_TextureDir, Directory_TextureSelected);
|
|
|
|
UpdateDefaultSelected(m_PluginDefault, Directory_PluginUseSelected);
|
|
UpdateDefaultSelected(m_AutoSaveDefault, Directory_NativeSaveUseSelected);
|
|
UpdateDefaultSelected(m_InstantDefault, Directory_InstantSaveUseSelected);
|
|
UpdateDefaultSelected(m_ScreenShotDefault, Directory_SnapShotUseSelected);
|
|
UpdateDefaultSelected(m_TextureDefault, Directory_TextureUseSelected);
|
|
|
|
if (UpdateScreen)
|
|
{
|
|
UpdatePageSettings();
|
|
}
|
|
}
|
|
|
|
bool COptionsDirectoriesPage::EnableReset(void)
|
|
{
|
|
if (m_PluginDir.IsChanged()) { return true; }
|
|
if (m_AutoSaveDir.IsChanged()) { return true; }
|
|
if (m_InstantSaveDir.IsChanged()) { return true; }
|
|
if (m_ScreenShotDir.IsChanged()) { return true; }
|
|
if (m_TextureDir.IsChanged()) { return true; }
|
|
if (m_PluginDefault.IsChanged()) { return true; }
|
|
if (m_AutoSaveDefault.IsChanged()) { return true; }
|
|
if (m_InstantDefault.IsChanged()) { return true; }
|
|
if (m_ScreenShotDefault.IsChanged()) { return true; }
|
|
if (m_TextureDefault.IsChanged()) { return true; }
|
|
return false;
|
|
}
|
|
|
|
void COptionsDirectoriesPage::ResetPage()
|
|
{
|
|
ResetDirectory(m_PluginDir, Directory_PluginSelected);
|
|
ResetDirectory(m_AutoSaveDir, Directory_NativeSaveSelected);
|
|
ResetDirectory(m_InstantSaveDir, Directory_InstantSaveSelected);
|
|
ResetDirectory(m_ScreenShotDir, Directory_SnapShotSelected);
|
|
ResetDirectory(m_TextureDir, Directory_TextureSelected);
|
|
|
|
ResetDefaultSelected(m_PluginDefault, m_PluginSelected, Directory_PluginUseSelected);
|
|
ResetDefaultSelected(m_AutoSaveDefault, m_AutoSaveSelected, Directory_NativeSaveUseSelected);
|
|
ResetDefaultSelected(m_InstantDefault, m_InstantSelected, Directory_InstantSaveUseSelected);
|
|
ResetDefaultSelected(m_ScreenShotDefault, m_ScreenShotSelected, Directory_SnapShotUseSelected);
|
|
ResetDefaultSelected(m_TextureDefault, m_TextureSelected, Directory_TextureUseSelected);
|
|
|
|
SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0);
|
|
} |