// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. // Copyright (C) 1999-2003 Forgotten // Copyright (C) 2004 Forgotten and the VBA development team // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2, or(at your option) // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Directories.cpp : implementation file // #include "stdafx.h" #include "vba.h" #include "Directories.h" #include "Reg.h" #include "WinResUtil.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Directories dialog static int CALLBACK browseCallbackProc(HWND hWnd, UINT msg, LPARAM l, LPARAM data) { char *buffer = (char *)data; switch(msg) { case BFFM_INITIALIZED: if(buffer[0]) SendMessage(hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)buffer); break; default: break; } return 0; } Directories::Directories(CWnd* pParent /*=NULL*/) : CDialog(Directories::IDD, pParent) { //{{AFX_DATA_INIT(Directories) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void Directories::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(Directories) DDX_Control(pDX, IDC_SAVE_PATH, m_savePath); DDX_Control(pDX, IDC_ROM_PATH, m_romPath); DDX_Control(pDX, IDC_GBROM_PATH, m_gbromPath); DDX_Control(pDX, IDC_CAPTURE_PATH, m_capturePath); DDX_Control(pDX, IDC_BATTERY_PATH, m_batteryPath); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(Directories, CDialog) //{{AFX_MSG_MAP(Directories) ON_BN_CLICKED(IDC_BATTERY_DIR, OnBatteryDir) ON_BN_CLICKED(IDC_BATTERY_DIR_RESET, OnBatteryDirReset) ON_BN_CLICKED(IDC_CAPTURE_DIR, OnCaptureDir) ON_BN_CLICKED(IDC_CAPTURE_DIR_RESET, OnCaptureDirReset) ON_BN_CLICKED(IDC_GBROM_DIR, OnGbromDir) ON_BN_CLICKED(IDC_GBROM_DIR_RESET, OnGbromDirReset) ON_BN_CLICKED(IDC_ROM_DIR, OnRomDir) ON_BN_CLICKED(IDC_ROM_DIR_RESET, OnRomDirReset) ON_BN_CLICKED(IDC_SAVE_DIR, OnSaveDir) ON_BN_CLICKED(IDC_SAVE_DIR_RESET, OnSaveDirReset) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Directories message handlers BOOL Directories::OnInitDialog() { CDialog::OnInitDialog(); CString p = regQueryStringValue("romdir", NULL); if(!p.IsEmpty()) { int len = p.GetLength(); if(len > 0) if(p[len-1] == '\\') p = p.Left(len-1); GetDlgItem(IDC_ROM_PATH)->SetWindowText(p); } p = regQueryStringValue("gbromdir", NULL); if(!p.IsEmpty()) { int len = p.GetLength(); if(len > 0) if(p[len-1] == '\\') p = p.Left(len-1); GetDlgItem(IDC_GBROM_PATH)->SetWindowText(p); } p = regQueryStringValue("batteryDir", NULL); if(!p.IsEmpty()) GetDlgItem(IDC_BATTERY_PATH)->SetWindowText( p); p = regQueryStringValue("saveDir", NULL); if(!p.IsEmpty()) GetDlgItem(IDC_SAVE_PATH)->SetWindowText(p); p = regQueryStringValue("captureDir", NULL); if(!p.IsEmpty()) GetDlgItem(IDC_CAPTURE_PATH)->SetWindowText(p); CenterWindow(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void Directories::OnBatteryDir() { m_batteryPath.GetWindowText(initialFolderDir); CString p = browseForDir(winResLoadString(IDS_SELECT_BATTERY_DIR)); if(!p.IsEmpty()) m_batteryPath.SetWindowText(p); } void Directories::OnBatteryDirReset() { regDeleteValue("batteryDir"); m_batteryPath.SetWindowText(""); } void Directories::OnCaptureDir() { m_capturePath.GetWindowText(initialFolderDir); CString p = browseForDir(winResLoadString(IDS_SELECT_CAPTURE_DIR)); if(!p.IsEmpty()) m_capturePath.SetWindowText(p); } void Directories::OnCaptureDirReset() { regDeleteValue("captureDir"); m_capturePath.SetWindowText(""); } void Directories::OnGbromDir() { m_gbromPath.GetWindowText(initialFolderDir); CString p = browseForDir(winResLoadString(IDS_SELECT_ROM_DIR)); if(!p.IsEmpty()) m_gbromPath.SetWindowText(p); } void Directories::OnGbromDirReset() { regDeleteValue("gbromdir"); m_gbromPath.SetWindowText(""); } void Directories::OnRomDir() { m_romPath.GetWindowText(initialFolderDir); CString p = browseForDir(winResLoadString(IDS_SELECT_ROM_DIR)); if(!p.IsEmpty()) m_romPath.SetWindowText(p); } void Directories::OnRomDirReset() { regDeleteValue("romdir"); m_romPath.SetWindowText(""); } void Directories::OnSaveDir() { m_savePath.GetWindowText(initialFolderDir); CString p = browseForDir(winResLoadString(IDS_SELECT_SAVE_DIR)); if(!p.IsEmpty()) m_savePath.SetWindowText(p); } void Directories::OnSaveDirReset() { regDeleteValue("saveDir"); m_savePath.SetWindowText(""); } void Directories::OnCancel() { EndDialog(FALSE); } void Directories::OnOK() { CString buffer; m_romPath.GetWindowText(buffer); if(!buffer.IsEmpty()) regSetStringValue("romdir", buffer); m_gbromPath.GetWindowText(buffer); if(!buffer.IsEmpty()) regSetStringValue("gbromdir", buffer); m_batteryPath.GetWindowText(buffer); if(!buffer.IsEmpty()) regSetStringValue("batteryDir", buffer); m_savePath.GetWindowText(buffer); if(!buffer.IsEmpty()) regSetStringValue("saveDir", buffer); m_capturePath.GetWindowText(buffer); if(!buffer.IsEmpty()) regSetStringValue("captureDir", buffer); EndDialog(TRUE); } CString Directories::browseForDir(CString title) { static char buffer[1024]; LPMALLOC pMalloc; LPITEMIDLIST pidl; CString res; if(SUCCEEDED(SHGetMalloc(&pMalloc))) { BROWSEINFO bi; ZeroMemory(&bi, sizeof(bi)); bi.hwndOwner = m_hWnd; bi.lpszTitle = title; bi.pidlRoot = 0; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = browseCallbackProc; bi.lParam = (LPARAM)(LPCTSTR)initialFolderDir; pidl = SHBrowseForFolder(&bi); if(pidl) { if(SHGetPathFromIDList(pidl, buffer)) { res = buffer; } pMalloc->Free(pidl); pMalloc->Release(); } } return res; }