rlm@1: // Directories.cpp : implementation file rlm@1: // rlm@1: rlm@1: #include "stdafx.h" rlm@1: #include rlm@1: #include "resource.h" rlm@1: #include "Directories.h" rlm@1: #include "Reg.h" rlm@1: #include "WinMiscUtil.h" rlm@1: #include "WinResUtil.h" rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // Directories dialog rlm@1: rlm@1: static int CALLBACK browseCallbackProc(HWND hWnd, UINT msg, rlm@1: LPARAM l, LPARAM data) rlm@1: { rlm@1: char *buffer = (char *)data; rlm@1: switch (msg) rlm@1: { rlm@1: case BFFM_INITIALIZED: rlm@1: if (buffer[0]) rlm@1: SendMessage(hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)buffer); rlm@1: break; rlm@1: default: rlm@1: break; rlm@1: } rlm@1: return 0; rlm@1: } rlm@1: rlm@1: Directories::Directories(CWnd*pParent /*=NULL*/) rlm@1: : CDialog(Directories::IDD, pParent) rlm@1: { rlm@1: //{{AFX_DATA_INIT(Directories) rlm@1: // NOTE: the ClassWizard will add member initialization here rlm@1: //}}AFX_DATA_INIT rlm@1: } rlm@1: rlm@1: void Directories::DoDataExchange(CDataExchange*pDX) rlm@1: { rlm@1: CDialog::DoDataExchange(pDX); rlm@1: //{{AFX_DATA_MAP(Directories) rlm@1: DDX_Control(pDX, IDC_ROM_PATH, m_romPath); rlm@1: DDX_Control(pDX, IDC_GBXROM_PATH, m_gbxromPath); rlm@1: DDX_Control(pDX, IDC_BATTERY_PATH, m_batteryPath); rlm@1: DDX_Control(pDX, IDC_SAVE_PATH, m_savePath); rlm@1: DDX_Control(pDX, IDC_MOVIE_PATH, m_moviePath); rlm@1: DDX_Control(pDX, IDC_CHEAT_PATH, m_cheatPath); rlm@1: DDX_Control(pDX, IDC_IPS_PATH, m_ipsPath); rlm@1: DDX_Control(pDX, IDC_LUA_PATH, m_luaPath); rlm@1: DDX_Control(pDX, IDC_AVI_PATH, m_aviPath); rlm@1: DDX_Control(pDX, IDC_WAV_PATH, m_wavPath); rlm@1: DDX_Control(pDX, IDC_CAPTURE_PATH, m_capturePath); rlm@1: DDX_Control(pDX, IDC_WATCH_PATH, m_watchPath); rlm@1: //}}AFX_DATA_MAP rlm@1: } rlm@1: rlm@1: BEGIN_MESSAGE_MAP(Directories, CDialog) rlm@1: //{{AFX_MSG_MAP(Directories) rlm@1: ON_BN_CLICKED(IDC_ROM_DIR, OnRomDir) rlm@1: ON_BN_CLICKED(IDC_ROM_DIR_RESET, OnRomDirReset) rlm@1: ON_BN_CLICKED(IDC_GBXROM_DIR, OnGBxRomDir) rlm@1: ON_BN_CLICKED(IDC_GBXROM_DIR_RESET, OnGBxRomDirReset) rlm@1: ON_BN_CLICKED(IDC_BATTERY_DIR, OnBatteryDir) rlm@1: ON_BN_CLICKED(IDC_BATTERY_DIR_RESET, OnBatteryDirReset) rlm@1: ON_BN_CLICKED(IDC_SAVE_DIR, OnSaveDir) rlm@1: ON_BN_CLICKED(IDC_SAVE_DIR_RESET, OnSaveDirReset) rlm@1: ON_BN_CLICKED(IDC_MOVIE_DIR, OnMovieDir) rlm@1: ON_BN_CLICKED(IDC_MOVIE_DIR_RESET, OnMovieDirReset) rlm@1: ON_BN_CLICKED(IDC_CHEAT_DIR, OnCheatDir) rlm@1: ON_BN_CLICKED(IDC_CHEAT_DIR_RESET, OnCheatDirReset) rlm@1: ON_BN_CLICKED(IDC_IPS_DIR, OnIpsDir) rlm@1: ON_BN_CLICKED(IDC_IPS_DIR_RESET, OnIpsDirReset) rlm@1: ON_BN_CLICKED(IDC_LUA_DIR, OnLuaDir) rlm@1: ON_BN_CLICKED(IDC_LUA_DIR_RESET, OnLuaDirReset) rlm@1: ON_BN_CLICKED(IDC_AVI_DIR, OnAviDir) rlm@1: ON_BN_CLICKED(IDC_AVI_DIR_RESET, OnAviDirReset) rlm@1: ON_BN_CLICKED(IDC_WAV_DIR, OnWavDir) rlm@1: ON_BN_CLICKED(IDC_WAV_DIR_RESET, OnWavDirReset) rlm@1: ON_BN_CLICKED(IDC_CAPTURE_DIR, OnCaptureDir) rlm@1: ON_BN_CLICKED(IDC_CAPTURE_DIR_RESET, OnCaptureDirReset) rlm@1: ON_BN_CLICKED(IDC_WATCH_DIR, OnWatchDir) rlm@1: ON_BN_CLICKED(IDC_WATCH_DIR_RESET, OnWatchDirReset) rlm@1: //}}AFX_MSG_MAP rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // Directories message handlers rlm@1: rlm@1: BOOL Directories::OnInitDialog() rlm@1: { rlm@1: CDialog::OnInitDialog(); rlm@1: rlm@1: CString p = regQueryStringValue(IDS_ROM_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_ROM_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_GBXROM_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_GBXROM_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_BATTERY_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_BATTERY_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_SAVE_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_SAVE_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_MOVIE_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_MOVIE_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_CHEAT_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_CHEAT_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_IPS_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_IPS_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_LUA_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_LUA_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_AVI_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_AVI_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_WAV_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_WAV_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_CAPTURE_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_CAPTURE_PATH)->SetWindowText(p); rlm@1: rlm@1: p = regQueryStringValue(IDS_WATCH_DIR, NULL); rlm@1: if (!p.IsEmpty()) rlm@1: GetDlgItem(IDC_WATCH_PATH)->SetWindowText(p); rlm@1: rlm@1: CenterWindow(); rlm@1: rlm@1: return TRUE; // return TRUE unless you set the focus to a control rlm@1: // EXCEPTION: OCX Property Pages should return FALSE rlm@1: } rlm@1: rlm@1: void Directories::OnRomDir() rlm@1: { rlm@1: m_romPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_ROM_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_romPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnRomDirReset() rlm@1: { rlm@1: m_romPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnGBxRomDir() rlm@1: { rlm@1: m_gbxromPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_GBXROM_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_gbxromPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnGBxRomDirReset() rlm@1: { rlm@1: m_gbxromPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnBatteryDir() rlm@1: { rlm@1: m_batteryPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_BATTERY_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_batteryPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnBatteryDirReset() rlm@1: { rlm@1: m_batteryPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnSaveDir() rlm@1: { rlm@1: m_savePath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_SAVE_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_savePath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnSaveDirReset() rlm@1: { rlm@1: m_savePath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnMovieDir() rlm@1: { rlm@1: m_moviePath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_MOVIE_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_moviePath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnMovieDirReset() rlm@1: { rlm@1: m_moviePath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnCheatDir() rlm@1: { rlm@1: m_cheatPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_CHEAT_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_cheatPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnCheatDirReset() rlm@1: { rlm@1: m_cheatPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnLuaDir() rlm@1: { rlm@1: m_luaPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_LUA_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_luaPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnLuaDirReset() rlm@1: { rlm@1: m_luaPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnAviDir() rlm@1: { rlm@1: m_aviPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_AVI_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_aviPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnAviDirReset() rlm@1: { rlm@1: m_aviPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnWavDir() rlm@1: { rlm@1: m_wavPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_WAV_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_wavPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnWavDirReset() rlm@1: { rlm@1: m_wavPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnCaptureDir() rlm@1: { rlm@1: m_capturePath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_CAPTURE_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_capturePath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnCaptureDirReset() rlm@1: { rlm@1: m_capturePath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnIpsDir() rlm@1: { rlm@1: m_ipsPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_IPS_DIR)); rlm@1: if (!p.IsEmpty()) rlm@1: m_ipsPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnIpsDirReset() rlm@1: { rlm@1: m_ipsPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnWatchDir() rlm@1: { rlm@1: m_watchPath.GetWindowText(initialFolderDir); rlm@1: CString p = browseForDir(winResLoadString(IDS_SELECT_WATCH_DIR)); rlm@1: if(!p.IsEmpty()) rlm@1: m_watchPath.SetWindowText(p); rlm@1: } rlm@1: rlm@1: void Directories::OnWatchDirReset() rlm@1: { rlm@1: m_watchPath.SetWindowText(""); rlm@1: } rlm@1: rlm@1: void Directories::OnCancel() rlm@1: { rlm@1: EndDialog(FALSE); rlm@1: } rlm@1: rlm@1: void Directories::OnOK() rlm@1: { rlm@1: CString buffer; rlm@1: rlm@1: m_romPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_ROM_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_ROM_DIR); rlm@1: rlm@1: m_gbxromPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_GBXROM_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_GBXROM_DIR); rlm@1: rlm@1: m_batteryPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_BATTERY_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_BATTERY_DIR); rlm@1: rlm@1: m_savePath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_SAVE_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_SAVE_DIR); rlm@1: rlm@1: m_moviePath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_MOVIE_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_MOVIE_DIR); rlm@1: rlm@1: m_cheatPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_CHEAT_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_CHEAT_DIR); rlm@1: rlm@1: m_ipsPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_IPS_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_IPS_DIR); rlm@1: rlm@1: m_luaPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_LUA_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_LUA_DIR); rlm@1: rlm@1: m_aviPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_AVI_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_AVI_DIR); rlm@1: rlm@1: m_wavPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_WAV_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_WAV_DIR); rlm@1: rlm@1: m_capturePath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_CAPTURE_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_CAPTURE_DIR); rlm@1: rlm@1: m_watchPath.GetWindowText(buffer); rlm@1: if (!buffer.IsEmpty()) rlm@1: regSetStringValue(IDS_WATCH_DIR, buffer); rlm@1: else rlm@1: regDeleteValue(IDS_WATCH_DIR); rlm@1: rlm@1: EndDialog(TRUE); rlm@1: } rlm@1: rlm@1: CString Directories::browseForDir(CString title) rlm@1: { rlm@1: static char buffer[1024]; rlm@1: LPMALLOC pMalloc; rlm@1: LPITEMIDLIST pidl; rlm@1: rlm@1: CString res; rlm@1: rlm@1: if (SUCCEEDED(SHGetMalloc(&pMalloc))) rlm@1: { rlm@1: BROWSEINFO bi; rlm@1: ZeroMemory(&bi, sizeof(bi)); rlm@1: bi.hwndOwner = m_hWnd; rlm@1: bi.lpszTitle = title; rlm@1: bi.pidlRoot = 0; rlm@1: bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; // will fail if COINIT_MULTITHREADED rlm@1: bi.lpfn = browseCallbackProc; rlm@1: bi.lParam = (LPARAM)(LPCTSTR)initialFolderDir; rlm@1: rlm@1: pidl = SHBrowseForFolder(&bi); rlm@1: rlm@1: if (pidl) rlm@1: { rlm@1: if (SHGetPathFromIDList(pidl, buffer)) rlm@1: { rlm@1: res = buffer; rlm@1: } rlm@1: pMalloc->Free(pidl); rlm@1: pMalloc->Release(); rlm@1: } rlm@1: } rlm@1: return res; rlm@1: }