2020-08-04 12:58:40 +00:00
|
|
|
/****************************************************************************
|
|
|
|
* *
|
|
|
|
* 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 "WelcomeScreen.h"
|
|
|
|
#include "resource.h"
|
|
|
|
|
|
|
|
WelcomeScreen::WelcomeScreen()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void WelcomeScreen::SelectGameDir(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
|
|
|
|
{
|
|
|
|
wchar_t Buffer[MAX_PATH], Directory[MAX_PATH];
|
|
|
|
LPITEMIDLIST pidl;
|
2021-01-02 03:37:00 +00:00
|
|
|
BROWSEINFO bi;
|
2020-08-04 12:58:40 +00:00
|
|
|
|
|
|
|
stdstr InitialDir = g_Settings->LoadStringVal(RomList_GameDir);
|
|
|
|
std::wstring wTitle = L"Select Game Directory";
|
|
|
|
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();
|
2021-01-02 03:37:00 +00:00
|
|
|
if ((pidl = SHBrowseForFolder(&bi)) != NULL)
|
2020-08-04 12:58:40 +00:00
|
|
|
{
|
2021-01-02 03:37:00 +00:00
|
|
|
if (SHGetPathFromIDList(pidl, Directory))
|
2020-08-04 12:58:40 +00:00
|
|
|
{
|
|
|
|
stdstr path;
|
|
|
|
CPath SelectedDir(path.FromUTF16(Directory), "");
|
|
|
|
if (SelectedDir.DirectoryExists())
|
|
|
|
{
|
|
|
|
GetDlgItem(IDC_GAME_DIR).SetWindowText(Directory);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
LRESULT WelcomeScreen::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
|
|
|
{
|
|
|
|
m_Logo.SubclassWindow(GetDlgItem(IDC_BMP_LOGO));
|
|
|
|
m_Logo.SetBitmap(MAKEINTRESOURCE(IDB_ABOUT_LOGO));
|
|
|
|
|
|
|
|
LanguageList LangList = g_Lang->GetLangList();
|
|
|
|
CComboBox LangCB(GetDlgItem(IDC_LANG_SEL));
|
|
|
|
for (LanguageList::iterator Language = LangList.begin(); Language != LangList.end(); Language++)
|
|
|
|
{
|
|
|
|
int Index = LangCB.AddString(stdstr(Language->LanguageName).ToUTF16().c_str());
|
|
|
|
if (_stricmp(Language->LanguageName.c_str(), "English") == 0)
|
|
|
|
{
|
|
|
|
LangCB.SetCurSel(Index);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (LangCB.GetCurSel() < 0)
|
|
|
|
{
|
|
|
|
LangCB.SetCurSel(0);
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
LRESULT WelcomeScreen::OnColorStatic(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
|
|
|
{
|
|
|
|
HDC hdcStatic = (HDC)wParam;
|
|
|
|
SetTextColor(hdcStatic, RGB(0, 0, 0));
|
|
|
|
SetBkMode(hdcStatic, TRANSPARENT);
|
|
|
|
return (LONG)(LRESULT)((HBRUSH)GetStockObject(NULL_BRUSH));
|
|
|
|
}
|
|
|
|
|
|
|
|
LRESULT WelcomeScreen::OnEraseBackground(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
|
|
|
{
|
|
|
|
static HPEN outline = CreatePen(PS_SOLID, 1, 0x00FFFFFF);
|
|
|
|
static HBRUSH fill = CreateSolidBrush(0x00FFFFFF);
|
|
|
|
SelectObject((HDC)wParam, outline);
|
|
|
|
SelectObject((HDC)wParam, fill);
|
|
|
|
|
|
|
|
RECT rect;
|
|
|
|
GetClientRect(&rect);
|
|
|
|
|
|
|
|
Rectangle((HDC)wParam, rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
LRESULT WelcomeScreen::OnOkCmd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL & /*bHandled*/)
|
|
|
|
{
|
|
|
|
CComboBox LangCB(GetDlgItem(IDC_LANG_SEL));
|
|
|
|
int Index = LangCB.GetCurSel();
|
|
|
|
if (Index >= 0)
|
|
|
|
{
|
|
|
|
wchar_t String[255];
|
|
|
|
LangCB.GetLBText(Index, String);
|
|
|
|
g_Lang->SetLanguage(stdstr().FromUTF16(String).c_str());
|
|
|
|
}
|
|
|
|
|
|
|
|
CPath GameDir(GetCWindowText(GetDlgItem(IDC_GAME_DIR)).c_str(), "");
|
|
|
|
if (GameDir.DirectoryExists())
|
|
|
|
{
|
2020-10-12 01:18:38 +00:00
|
|
|
g_Settings->SaveString(RomList_GameDir, GameDir.GetDriveDirectory().c_str());
|
2020-08-04 12:58:40 +00:00
|
|
|
Notify().AddRecentDir(GameDir);
|
|
|
|
}
|
|
|
|
EndDialog(0);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
int CALLBACK WelcomeScreen::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;
|
|
|
|
}
|