#ifdef old #include "..\\Multilanguage.h" #include "..\\Settings.h" #include "..\\Plugin.h" #include #include #include #include #include "..\\User Interface\\resource.h" BOOL CALLBACK AdvancedOptionsProc ( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK DirSelectProc ( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK PluginSelectProc ( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK GeneralOptionsProc ( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK RomSettingsProc ( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK RomStatusProc ( HWND, UINT, WPARAM, LPARAM ); int CALLBACK RomBrowserConfigProc ( DWORD, DWORD, DWORD, DWORD ); BOOL CALLBACK ShortCutConfigProc ( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK ShellIntegrationProc ( HWND, UINT, WPARAM, LPARAM ); class SETTINGS_TAB { public: SETTINGS_TAB(LanguageStringID LanguageID, WORD TemplateID, DLGPROC pfnDlgProc) { this->LanguageID = LanguageID; this->TemplateID = TemplateID; this->pfnDlgProc = pfnDlgProc; } stdstr Title; LanguageStringID LanguageID; WORD TemplateID; DLGPROC pfnDlgProc; } ; typedef std::vector SETTINGS_TAB_VECTOR; typedef struct { CN64System * System; CMainGui * Gui; } SETTING_CLASSES; SETTINGS_TAB BasicSettingsTabs[] = { SETTINGS_TAB( TAB_PLUGIN, IDD_Settings_PlugSel, PluginSelectProc ), SETTINGS_TAB( TAB_OPTIONS, IDD_Settings_General, GeneralOptionsProc ), }; SETTINGS_TAB AdvancedSettingsTabs[] = { SETTINGS_TAB( TAB_DIRECTORY, IDD_Settings_Directory, DirSelectProc ), SETTINGS_TAB( TAB_ADVANCED, IDD_Settings_Advanced, AdvancedOptionsProc ), SETTINGS_TAB( TAB_ROMSELECTION, IDD_Settings_RomBrowser,(DLGPROC)RomBrowserConfigProc ), SETTINGS_TAB( TAB_SHORTCUTS, IDD_Settings_Accelerator,ShortCutConfigProc ), SETTINGS_TAB( TAB_SHELLINTERGATION,IDD_Settings_ShellInt, ShellIntegrationProc ), }; SETTINGS_TAB RomSettingsTabs[] = { SETTINGS_TAB( TAB_ROMSETTINGS, IDD_Settings_Rom, RomSettingsProc ), SETTINGS_TAB( TAB_ROMSTATUS, IDD_Settings_RomStatus, RomStatusProc ), }; enum { MaxConfigPages = 40 }; /*void CSettings::Config (void * ParentWindow, CN64System * System, CMainGui * Gui) { if (_Lang == NULL) { return; } int count; SETTING_CLASSES Classes; Classes.System = System; Classes.Gui = Gui; SETTINGS_TAB_VECTOR Tabs; for (count = 0; count < (sizeof(BasicSettingsTabs) / sizeof(SETTINGS_TAB)); count ++) { Tabs.push_back(BasicSettingsTabs[count]); } if (LoadString(ROM_NAME).length() > 0) { if (LoadString(ROM_MD5).length() == 0) { CN64Rom * Rom = System->GetCurrentRom(); if (Rom) { SaveDword(ROM_MD5,Rom->GetRomMD5().c_str()); SaveDword(ROM_InternalName,Rom->GetRomName().c_str()); } } for (count = 0; count < (sizeof(RomSettingsTabs) / sizeof(SETTINGS_TAB)); count ++) { Tabs.push_back(RomSettingsTabs[count]); } } if (!LoadDword(BasicMode)) { for (count = 0; count < (sizeof(AdvancedSettingsTabs) / sizeof(SETTINGS_TAB)); count ++) { Tabs.push_back(AdvancedSettingsTabs[count]); } } PROPSHEETPAGE psp[MaxConfigPages]; for (count = 0; count < Tabs.size(); count ++) { Tabs[count].Title = _Lang->GetString(Tabs[count].LanguageID); psp[count].dwSize = sizeof(PROPSHEETPAGE); psp[count].dwFlags = PSP_USETITLE; psp[count].hInstance = GetModuleHandle(NULL); psp[count].pszTemplate = MAKEINTRESOURCE(Tabs[count].TemplateID); psp[count].pfnDlgProc = Tabs[count].pfnDlgProc; psp[count].pszTitle = Tabs[count].Title.c_str(); psp[count].lParam = (long)&Classes; psp[count].pfnCallback = NULL; } PROPSHEETHEADER psh; stdstr SettingTitle = _Lang->GetString(OPTIONS_TITLE); psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_PROPSHEETPAGE; psh.hwndParent = (HWND)ParentWindow; psh.hInstance = GetModuleHandle(NULL); psh.pszCaption = SettingTitle.c_str(); psh.nPages = Tabs.size(); psh.nStartPage = 0; psh.ppsp = (LPCPROPSHEETPAGE) &psp; psh.pfnCallback = NULL; PropertySheet(&psh); }*/ /*void CSettings::ConfigRom (void * ParentWindow, CMainGui * Gui) { if (_Lang == NULL) { return; } int count; SETTING_CLASSES Classes; Classes.System = NULL; Classes.Gui = Gui; SETTINGS_TAB_VECTOR Tabs; for (count = 0; count < (sizeof(RomSettingsTabs) / sizeof(SETTINGS_TAB)); count ++) { Tabs.push_back(RomSettingsTabs[count]); } PROPSHEETPAGE psp[MaxConfigPages]; for (count = 0; count < Tabs.size(); count ++) { Tabs[count].Title = _Lang->GetString(Tabs[count].LanguageID); psp[count].dwSize = sizeof(PROPSHEETPAGE); psp[count].dwFlags = PSP_USETITLE; psp[count].hInstance = GetModuleHandle(NULL); psp[count].pszTemplate = MAKEINTRESOURCE(Tabs[count].TemplateID); psp[count].pfnDlgProc = Tabs[count].pfnDlgProc; psp[count].pszTitle = _Lang->GetString(Tabs[count].LanguageID).c_str(); psp[count].lParam = (long)&Classes; psp[count].pfnCallback = NULL; } PROPSHEETHEADER psh; stdstr SettingTitle = _Lang->GetString(OPTIONS_TITLE); psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_PROPSHEETPAGE; psh.hwndParent = (HWND)ParentWindow; psh.hInstance = GetModuleHandle(NULL); psh.pszCaption = SettingTitle.c_str(); psh.nPages = Tabs.size(); psh.nStartPage = 0; psh.ppsp = (LPCPROPSHEETPAGE) &psp; psh.pfnCallback = NULL; PropertySheet(&psh); }*/ typedef struct _PLUGIN_LIST{ int Type; WORD ListID; WORD AboutID; SettingID Setting_ID; SettingID ChangeSettingID; stdstr CurrentPlugin; _PLUGIN_LIST (int _Type, WORD _ListID, WORD _AboutID, SettingID _Setting_ID, SettingID _ChangeSettingID, LPCSTR _CurrentPlugin) : Type(_Type), ListID(_ListID), AboutID(_AboutID), Setting_ID(_Setting_ID), ChangeSettingID(_ChangeSettingID), CurrentPlugin(_CurrentPlugin) { } } PLUGIN_LIST; PLUGIN_LIST Items[] = { PLUGIN_LIST(PLUGIN_TYPE_RSP, RSP_LIST, RSP_ABOUT, CurrentRSP_Plugin, RSP_PluginChanged, "" ), PLUGIN_LIST(PLUGIN_TYPE_GFX, GFX_LIST, GFX_ABOUT, CurrentGFX_Plugin, GFX_PluginChanged, "" ), PLUGIN_LIST(PLUGIN_TYPE_AUDIO, AUDIO_LIST, AUDIO_ABOUT, CurrentAUDIO_Plugin, AUDIO_PluginChanged, "" ), PLUGIN_LIST(PLUGIN_TYPE_CONTROLLER, CONT_LIST, CONT_ABOUT, CurrentCONT_Plugin, CONT_PluginChanged, "" ), }; int AddDropDownItem (HWND hDlg, WORD CtrlID, LPCSTR StringID, int ItemData, DWORD * Variable) { HWND hCtrl = GetDlgItem(hDlg,CtrlID); int indx; indx = SendMessage(hCtrl,CB_ADDSTRING,0,(LPARAM)StringID); SendMessage(hCtrl,CB_SETITEMDATA,indx,ItemData); if (*Variable == ItemData) { SendMessage(hCtrl,CB_SETCURSEL,indx,0); } if (SendMessage(hCtrl,CB_GETCOUNT,0,0) == 1) { SendMessage(hCtrl,CB_SETCURSEL,0,0); } return indx; } void SetFlagControl (HWND hDlg, bool Flag, WORD CtrlID, const char * Name) { SetDlgItemText(hDlg,CtrlID,Name); if (Flag) { SendMessage(GetDlgItem(hDlg,CtrlID),BM_SETCHECK, BST_CHECKED,0); } } BOOL CALLBACK AdvancedOptionsProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; SetDlgItemText(hDlg,IDC_CORE_DEFAULTS,GS(ADVANCE_DEFAULTS)); //Self mod method SetFlagControl(hDlg,_Settings->LoadDword(SYSTEM_SMM_Cache) != 0, IDC_SMM_CACHE, GS(ADVANCE_SMM_CACHE)); SetFlagControl(hDlg,_Settings->LoadDword(SYSTEM_SMM_PIDMA) != 0, IDC_SMM_DMA, GS(ADVANCE_SMM_PIDMA)); SetFlagControl(hDlg,_Settings->LoadDword(SYSTEM_SMM_ValidFunc) != 0, IDC_SMM_VALIDATE, GS(ADVANCE_SMM_VALIDATE)); SetFlagControl(hDlg,_Settings->LoadDword(SYSTEM_SMM_Protect) != 0, IDC_SMM_PROTECT, GS(ADVANCE_SMM_PROTECT)); SetFlagControl(hDlg,_Settings->LoadDword(SYSTEM_SMM_TLB) != 0, IDC_SMM_TLB, GS(ADVANCE_SMM_TLB)); SetFlagControl(hDlg,_Settings->LoadDword(AutoStart) != 0, IDC_START_ON_ROM_OPEN, GS(ADVANCE_AUTO_START)); SetFlagControl(hDlg,_Settings->LoadDword(AutoZip) != 0, IDC_ZIP, GS(ADVANCE_COMPRESS)); SetFlagControl(hDlg,_Settings->LoadDword(Debugger) != 0, IDC_DEBUGGER, GS(ADVANCE_DEBUGGER)); DWORD CPU_Type = _Settings->LoadDword(SYSTEM_CPUType); AddDropDownItem(hDlg,IDC_CPU_TYPE,GS(CORE_INTERPTER),CPU_Interpreter,&CPU_Type); AddDropDownItem(hDlg,IDC_CPU_TYPE,GS(CORE_RECOMPILER),CPU_Recompiler,&CPU_Type); if (_Settings->LoadDword(Debugger)) { AddDropDownItem(hDlg,IDC_CPU_TYPE,GS(CORE_SYNC),CPU_SyncCores,&CPU_Type); } DWORD FunctionLookup = _Settings->LoadDword(SYSTEM_FunctionLookup); AddDropDownItem(hDlg,IDC_FUNCFIND,GS(FLM_PLOOKUP),FuncFind_PhysicalLookup,&FunctionLookup); AddDropDownItem(hDlg,IDC_FUNCFIND,GS(FLM_VLOOKUP),FuncFind_VirtualLookup,&FunctionLookup); //AddDropDownItem(hDlg,IDC_FUNCFIND,GS(FLM_CHANGEMEM),FuncFind_ChangeMemory,&FunctionLookup); DWORD RDRamSize = _Settings->LoadDword(SYSTEM_RDRamSize); AddDropDownItem(hDlg,IDC_RDRAM_SIZE,GS(RDRAM_4MB),0x400000,&RDRamSize); AddDropDownItem(hDlg,IDC_RDRAM_SIZE,GS(RDRAM_8MB),0x800000,&RDRamSize); DWORD SystemABL = _Settings->LoadDword(SYSTEM_BlockLinking); AddDropDownItem(hDlg,IDC_ABL,GS(ABL_ON),TRUE,(DWORD *)&SystemABL); AddDropDownItem(hDlg,IDC_ABL,GS(ABL_OFF),FALSE,(DWORD *)&SystemABL); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CPU_TYPE: case IDC_RDRAM_SIZE: case IDC_FUNCFIND: case IDC_ABL: if (HIWORD(wParam) == LBN_SELCHANGE) { SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; case IDC_SMM_CACHE: case IDC_SMM_DMA: case IDC_SMM_VALIDATE: case IDC_SMM_PROTECT: case IDC_SMM_TLB: case IDC_START_ON_ROM_OPEN: case IDC_ZIP: case IDC_DEBUGGER: SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); break; } break; case WM_NOTIFY: if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); int indx; indx = SendDlgItemMessage(hDlg,IDC_CPU_TYPE,CB_GETCURSEL,0,0); _Settings->SaveDword(SYSTEM_CPUType,SendDlgItemMessage(hDlg,IDC_CPU_TYPE,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_RDRAM_SIZE,CB_GETCURSEL,0,0); _Settings->SaveDword(SYSTEM_RDRamSize,SendDlgItemMessage(hDlg,IDC_RDRAM_SIZE,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_FUNCFIND,CB_GETCURSEL,0,0); _Settings->SaveDword(SYSTEM_FunctionLookup,SendDlgItemMessage(hDlg,IDC_FUNCFIND,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_ABL,CB_GETCURSEL,0,0); _Settings->SaveDword(SYSTEM_BlockLinking,SendDlgItemMessage(hDlg,IDC_ABL,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); _Settings->SaveDword(SYSTEM_SMM_Cache,SendMessage(GetDlgItem(hDlg,IDC_SMM_CACHE),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(SYSTEM_SMM_PIDMA,SendMessage(GetDlgItem(hDlg,IDC_SMM_DMA),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(SYSTEM_SMM_ValidFunc,SendMessage(GetDlgItem(hDlg,IDC_SMM_VALIDATE),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(SYSTEM_SMM_Protect,SendMessage(GetDlgItem(hDlg,IDC_SMM_PROTECT),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(SYSTEM_SMM_TLB,SendMessage(GetDlgItem(hDlg,IDC_SMM_TLB),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(AutoStart,SendMessage(GetDlgItem(hDlg,IDC_START_ON_ROM_OPEN),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(AutoZip,SendMessage(GetDlgItem(hDlg,IDC_ZIP),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(Debugger,SendMessage(GetDlgItem(hDlg,IDC_DEBUGGER),BM_GETSTATE, 0,0) == BST_CHECKED); CBaseMenu * Menu = Classes->Gui->GetMenuClass(); Menu->ResetMenu(); } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { RemoveProp((HWND)hDlg,"Classes"); } break; default: return FALSE; } return TRUE; } int CALLBACK SelectDirCallBack (WND_HANDLE 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)hwnd,BFFM_SETSELECTION,TRUE,lpData); } break; } return 0; } BOOL CALLBACK KeyPromptDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: SetForegroundWindow(GetParent(hDlg)); DestroyWindow(hDlg); break; } break; default: return FALSE; } return TRUE; } void InputGetKeys (HWND hDlg ) { HWND hKeyDlg = CreateDialogParam(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_Key_Prompt),hDlg,KeyPromptDlgProc,(LPARAM)GetDlgItem(hDlg,IDC_VIRTUALKEY)); EnableWindow(GetParent(hDlg),false); MSG msg; for(bool fDone=false;!fDone;MsgWaitForMultipleObjects(0,NULL,false,45,QS_ALLINPUT)) { while(PeekMessage(&msg,0,0,0,PM_REMOVE)) { if(msg.message == WM_QUIT) { fDone = true; PostMessage(NULL,WM_QUIT,0,0); break; } if (msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN ) { int nVirtKey = (int)msg.wParam; DWORD lKeyData = msg.lParam; if (nVirtKey == VK_SHIFT) { continue; } if (nVirtKey == VK_CONTROL) { continue; } if (nVirtKey == VK_MENU) { continue; } SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_SETCURSEL,-1,0); for (int count = 0; count < SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_GETCOUNT,0,0); count++) { int Data = (int)SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_GETITEMDATA,count,0); if (Data != nVirtKey) { continue; } SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_SETCURSEL,count,0); SendDlgItemMessage(hDlg,IDC_CTL,BM_SETCHECK, (GetKeyState(VK_CONTROL) & 0x80) != 0 ? BST_CHECKED : BST_UNCHECKED,0); SendDlgItemMessage(hDlg,IDC_ALT,BM_SETCHECK, (GetKeyState(VK_MENU) & 0x80) != 0 ? BST_CHECKED : BST_UNCHECKED,0); SendDlgItemMessage(hDlg,IDC_SHIFT,BM_SETCHECK, (GetKeyState(VK_SHIFT) & 0x80) != 0 ? BST_CHECKED : BST_UNCHECKED,0); SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_VIRTUALKEY,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_VIRTUALKEY)); SetForegroundWindow(GetParent(hDlg)); DestroyWindow(hKeyDlg); } continue; } if(!IsDialogMessage(hKeyDlg,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } if(!IsWindow(hKeyDlg)) { fDone = true; } } SetFocus(GetParent(hDlg)); EnableWindow(GetParent(hDlg),true); } void RefreshShortCutOptions ( HWND hDlg, HTREEITEM hItem ) { SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_RESETCONTENT,0,0); HWND hTree = GetDlgItem(hDlg,IDC_MENU_ITEMS); HTREEITEM hParent = TreeView_GetParent(hTree,hItem); if (hParent == NULL) { return; } TVITEM item; item.mask = TVIF_PARAM; item.hItem = (HTREEITEM)hItem; TreeView_GetItem(hTree,&item); int SelIndex = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETCURSEL,0,0); int AccessLevel = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETITEMDATA,SelIndex,0); MENU_SHORT_CUT * ShortCut = (MENU_SHORT_CUT *)item.lParam; for (SHORTCUT_KEY_LIST::const_iterator ShortCut_item = ShortCut->GetAccelItems().begin(); ShortCut_item != ShortCut->GetAccelItems().end(); ShortCut_item++) { MENU_SHORT_CUT_KEY::ACCESS_MODE ItemMode = ShortCut_item->AccessMode(); if ((ItemMode & AccessLevel) != AccessLevel ) { continue; } stdstr Name = ShortCut_item->Name(); int index = SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_ADDSTRING,0,(LPARAM)Name.c_str()); SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_SETITEMDATA,index,(LPARAM)&*ShortCut_item); } } BOOL CALLBACK ShortCutConfigProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; CBaseMenu *Menu = Classes->Gui->GetMenuClass(); MSC_MAP * ShortCuts = new MSC_MAP(Menu->GetShortCutInfo(false)); SetProp((HWND)hDlg,"ShortCuts",(SETTING_CLASSES *)ShortCuts); SetDlgItemText(hDlg,IDC_S_CPU_STATE,GS(ACCEL_CPUSTATE_TITLE)); SetDlgItemText(hDlg,IDC_MENU_ITEM_TEXT,GS(ACCEL_MENUITEM_TITLE)); SetDlgItemText(hDlg,IDC_S_CURRENT_KEYS,GS(ACCEL_CURRENTKEYS_TITLE)); SetDlgItemText(hDlg,IDC_S_SELECT_SHORT,GS(ACCEL_SELKEY_TITLE)); SetDlgItemText(hDlg,IDC_S_CURRENT_ASSIGN,GS(ACCEL_ASSIGNEDTO_TITLE)); SetDlgItemText(hDlg,IDC_ASSIGN,GS(ACCEL_ASSIGN_BTN)); SetDlgItemText(hDlg,IDC_REMOVE,GS(ACCEL_REMOVE_BTN)); SetDlgItemText(hDlg,IDC_RESET,GS(ACCEL_RESETALL_BTN)); int index = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_ADDSTRING,0,(LPARAM)GS(ACCEL_CPUSTATE_1)); SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_SETITEMDATA,index,MENU_SHORT_CUT_KEY::GAME_NOT_RUNNING); index = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_ADDSTRING,0,(LPARAM)GS(ACCEL_CPUSTATE_3)); SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_SETITEMDATA,index,MENU_SHORT_CUT_KEY::GAME_RUNNING_WINDOW); SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_SETCURSEL,index,0); index = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_ADDSTRING,0,(LPARAM)GS(ACCEL_CPUSTATE_4)); SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_SETITEMDATA,index,MENU_SHORT_CUT_KEY::GAME_RUNNING_FULLSCREEN); SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_C_CPU_STATE,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_C_CPU_STATE)); HWND hTree = GetDlgItem(hDlg,IDC_MENU_ITEMS); DWORD Style = GetWindowLong(hTree,GWL_STYLE); SetWindowLong(hTree,GWL_STYLE,TVS_SHOWSELALWAYS| Style); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_C_CPU_STATE: if (HIWORD(wParam) == LBN_SELCHANGE) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); CBaseMenu *Menu = Classes->Gui->GetMenuClass(); int SelIndex = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETCURSEL,0,0); int AccessLevel = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETITEMDATA,SelIndex,0); MSC_MAP * ShortCuts = (MSC_MAP *)GetProp((HWND)hDlg,"ShortCuts"); HWND hTree = GetDlgItem((HWND)hDlg, IDC_MENU_ITEMS); TreeView_DeleteAllItems(hTree); for (MSC_MAP::iterator Item = ShortCuts->begin(); Item != ShortCuts->end(); Item++) { MENU_SHORT_CUT_KEY::ACCESS_MODE ItemMode = Item->second.AccessMode(); if ((ItemMode & AccessLevel) != AccessLevel ) { continue; } //find Parent TV_INSERTSTRUCT tv; tv.item.mask = TVIF_PARAM; tv.item.hItem = TreeView_GetChild((HWND)hTree,TVI_ROOT); while (tv.item.hItem) { TreeView_GetItem((HWND)hTree,&tv.item); if (tv.item.lParam == Item->second.Section()) { break; } tv.item.hItem = TreeView_GetNextSibling(hTree,tv.item.hItem); } if (tv.item.hItem == NULL) { char Text[500]; strcpy(Text,GS(Item->second.Section())); tv.item.mask = TVIF_TEXT | TVIF_PARAM; tv.item.pszText = Text; tv.item.lParam = Item->second.Section(); tv.item.cchTextMax = sizeof(Text); tv.hInsertAfter = TVI_LAST; tv.hParent = TVI_ROOT; tv.item.hItem = TreeView_InsertItem((HWND)hTree,&tv); } char Text[500]; stdstr str = GS(Item->second.Title()); str.resize(std::remove(str.begin(), str.end(), '&') - str.begin()); tv.hParent = tv.item.hItem; tv.hInsertAfter = TVI_LAST; strcpy(Text,str.c_str()); tv.item.mask = TVIF_TEXT | TVIF_PARAM; tv.item.pszText = Text; tv.item.lParam = (WPARAM)&Item->second; tv.item.cchTextMax = sizeof(Text); tv.item.hItem = TreeView_InsertItem((HWND)hTree,&tv); } int VirtualKeyListSize; VIRTUAL_KEY *VirtualKeyList = MENU_SHORT_CUT_KEY::VirtualKeyList(VirtualKeyListSize); for (int count = 0; count < VirtualKeyListSize; count++) { int index = SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_ADDSTRING,0,(LPARAM)VirtualKeyList[count].Name); SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_SETITEMDATA,index,VirtualKeyList[count].Key); } //SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_MENU_ITEM_LIST,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_MENU_ITEM_LIST)); SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_VIRTUALKEY,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_VIRTUALKEY)); } break; case IDC_KEY_PROMPT: { CloseHandle(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)InputGetKeys,hDlg,0,NULL)); } break; case IDC_ASSIGN: { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); CNotification * _Notify = Classes->Gui->GetNotifyClass(); //Get the virtual key info int index = SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_GETCURSEL,0,0); if (index < 0) { _Notify->DisplayError(GS(MSG_NO_SHORTCUT_SEL)); break; } WORD key = SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_GETITEMDATA,index,0); bool bCtrl = (SendDlgItemMessage(hDlg,IDC_CTL,BM_GETCHECK, 0,0) == BST_CHECKED); bool bAlt = (SendDlgItemMessage(hDlg,IDC_ALT,BM_GETCHECK, 0,0) == BST_CHECKED); bool bShift = (SendDlgItemMessage(hDlg,IDC_SHIFT,BM_GETCHECK, 0,0) == BST_CHECKED); int SelIndex = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETCURSEL,0,0); MENU_SHORT_CUT_KEY::ACCESS_MODE AccessLevel = (MENU_SHORT_CUT_KEY::ACCESS_MODE)SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETITEMDATA,SelIndex,0); HWND hTree = GetDlgItem(hDlg,IDC_MENU_ITEMS); HTREEITEM hSelectedItem = TreeView_GetSelection(hTree); if (hSelectedItem == NULL) { _Notify->DisplayError(GS(MSG_NO_MENUITEM_SEL)); break; } HTREEITEM hParent = TreeView_GetParent(hTree,hSelectedItem); if (hParent == NULL) { _Notify->DisplayError(GS(MSG_NO_MENUITEM_SEL)); break; } TVITEM item; item.mask = TVIF_PARAM; item.hItem = (HTREEITEM)hSelectedItem; TreeView_GetItem(hTree,&item); MENU_SHORT_CUT * ShortCut = (MENU_SHORT_CUT *)item.lParam; /*index = SendDlgItemMessage(hDlg,IDC_MENU_ITEM_LIST,LB_GETCURSEL,0,0); if (index < 0) { _Notify->DisplayError(GS(MSG_NO_MENUITEM_SEL)); break; } */ CBaseMenu *Menu = Classes->Gui->GetMenuClass(); MSC_MAP * ShortCuts = (MSC_MAP *)GetProp((HWND)hDlg,"ShortCuts"); LanguageStringID strid = Menu->GetShortCutMenuItemName(ShortCuts,key,bCtrl,bAlt,bShift,AccessLevel); if (strid != EMPTY_STRING) { _Notify->DisplayError(GS(MSG_MENUITEM_ASSIGNED)); break; } ShortCut->AddShortCut(key,bCtrl,bAlt,bShift,AccessLevel); RefreshShortCutOptions(hDlg,hSelectedItem); //SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_MENU_ITEM_LIST,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_MENU_ITEM_LIST)); //SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_VIRTUALKEY,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_VIRTUALKEY)); SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; //Remove a short cut key case IDC_REMOVE: { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); CNotification * _Notify = Classes->Gui->GetNotifyClass(); HWND hTree = GetDlgItem(hDlg,IDC_MENU_ITEMS); HTREEITEM hSelectedItem = TreeView_GetSelection(hTree); if (hSelectedItem == NULL) { _Notify->DisplayError(GS(MSG_NO_SEL_SHORTCUT)); break; } HTREEITEM hParent = TreeView_GetParent(hTree,hSelectedItem); if (hParent == NULL) { _Notify->DisplayError(GS(MSG_NO_SEL_SHORTCUT)); break; } TVITEM item; item.mask = TVIF_PARAM; item.hItem = (HTREEITEM)hSelectedItem; TreeView_GetItem(hTree,&item); int SelIndex = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETCURSEL,0,0); int AccessLevel = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETITEMDATA,SelIndex,0); MENU_SHORT_CUT * ShortCut = (MENU_SHORT_CUT *)item.lParam; //Male sure an item is selected int index = SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_GETCURSEL,0,0); if (index < 0) { _Notify->DisplayError(GS(MSG_NO_SEL_SHORTCUT)); break; } MENU_SHORT_CUT_KEY * ShortCutKey = (MENU_SHORT_CUT_KEY *)SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_GETITEMDATA,index,0); ShortCut->RemoveItem(ShortCutKey); RefreshShortCutOptions(hDlg,hSelectedItem); SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_VIRTUALKEY,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_VIRTUALKEY)); SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; // case IDC_MENU_ITEM_LIST: // { // SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); // if (Classes == NULL) { break; } // // if (HIWORD(wParam) != LBN_SELCHANGE) { break; } // SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_RESETCONTENT,0,0); // // int index = SendDlgItemMessage(hDlg,IDC_MENU_ITEM_LIST,LB_GETCURSEL,0,0); // if (index < 0) { break; } // // int SelIndex = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETCURSEL,0,0); // int AccessLevel = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETITEMDATA,SelIndex,0); // // // MENU_SHORT_CUT * ShortCut = (MENU_SHORT_CUT *)SendDlgItemMessage(hDlg,IDC_MENU_ITEM_LIST,LB_GETITEMDATA,index,0); // for (SHORTCUT_KEY_LIST::const_iterator item = ShortCut->GetAccelItems().begin(); item != ShortCut->GetAccelItems().end(); item++) // { // MENU_SHORT_CUT_KEY::ACCESS_MODE ItemMode = item->AccessMode(); // if ((ItemMode & AccessLevel) != AccessLevel ) // { // continue; // } // stdstr Name = item->Name(); // index = SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_ADDSTRING,0,(LPARAM)Name.c_str()); // SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_SETITEMDATA,index,(LPARAM)&*item); // } // } // break; case IDC_VIRTUALKEY: if (HIWORD(wParam) != LBN_SELCHANGE) { break; } case IDC_CTL: case IDC_ALT: case IDC_SHIFT: // case IDC_RUNNING: { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); //Get the virtual key info int index = SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_GETCURSEL,0,0); if (index < 0) { break; } WORD key = SendDlgItemMessage(hDlg,IDC_VIRTUALKEY,CB_GETITEMDATA,index,0); bool bCtrl = (SendDlgItemMessage(hDlg,IDC_CTL,BM_GETCHECK, 0,0) == BST_CHECKED); bool bAlt = (SendDlgItemMessage(hDlg,IDC_ALT,BM_GETCHECK, 0,0) == BST_CHECKED); bool bShift = (SendDlgItemMessage(hDlg,IDC_SHIFT,BM_GETCHECK, 0,0) == BST_CHECKED); int SelIndex = SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETCURSEL,0,0); MENU_SHORT_CUT_KEY::ACCESS_MODE AccessLevel = (MENU_SHORT_CUT_KEY::ACCESS_MODE)SendDlgItemMessage(hDlg,IDC_C_CPU_STATE,CB_GETITEMDATA,SelIndex,0); CNotification * _Notify = Classes->Gui->GetNotifyClass(); CBaseMenu *Menu = Classes->Gui->GetMenuClass(); MSC_MAP * ShortCuts = (MSC_MAP *)GetProp((HWND)hDlg,"ShortCuts"); stdstr str = GS(Menu->GetShortCutMenuItemName(ShortCuts,key,bCtrl,bAlt,bShift,AccessLevel)); str.resize(std::remove(str.begin(), str.end(), '&') - str.begin()); if (str.length() == 0) { str = "None"; } SetDlgItemText(hDlg,IDC_ASSIGNED_MENU_ITEM,str.c_str()); } break; case IDC_RESET: { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); int result = MessageBox(NULL,GS(STR_SHORTCUT_RESET_TEXT),GS(STR_SHORTCUT_RESET_TITLE), MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2); if (result == IDNO) { break; } CBaseMenu *Menu = Classes->Gui->GetMenuClass(); //Remove current short cuts MSC_MAP * ShortCuts = (MSC_MAP *)GetProp((HWND)hDlg,"ShortCuts"); RemoveProp((HWND)hDlg,"ShortCuts"); delete ShortCuts; // Recreate short cuts ShortCuts = new MSC_MAP(Menu->GetShortCutInfo(true)); SetProp((HWND)hDlg,"ShortCuts",(SETTING_CLASSES *)ShortCuts); SendDlgItemMessage(hDlg,IDC_CURRENT_KEYS,LB_RESETCONTENT,0,0); SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_C_CPU_STATE,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_C_CPU_STATE)); SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); // SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_MENU_ITEM_LIST,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_MENU_ITEM_LIST)); SendMessage(hDlg,WM_COMMAND,MAKELPARAM(IDC_VIRTUALKEY,LBN_SELCHANGE),(LPARAM)GetDlgItem(hDlg,IDC_VIRTUALKEY)); } break; } break; case WM_NOTIFY: if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); MSC_MAP * ShortCuts = (MSC_MAP *)GetProp((HWND)hDlg,"ShortCuts"); CBaseMenu * Menu = Classes->Gui->GetMenuClass(); Menu->SaveShortCuts(ShortCuts); Menu->ResetMenu(); } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { MSC_MAP * ShortCuts = (MSC_MAP *)GetProp((HWND)hDlg,"ShortCuts"); delete ShortCuts; RemoveProp((HWND)hDlg,"ShortCuts"); RemoveProp((HWND)hDlg,"Classes"); } { LPNMHDR lpnmh = (LPNMHDR) lParam; if ((lpnmh->code == TVN_SELCHANGED) && (lpnmh->idFrom == IDC_MENU_ITEMS)) { LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; RefreshShortCutOptions(hDlg,pnmtv->itemNew.hItem); } } break; default: return FALSE; } return TRUE; } BOOL CALLBACK DirSelectProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; stdstr &TexturePath = _Settings->LoadString(TextureDir); SendMessage(GetDlgItem(hDlg,_Settings->LoadDword(UsePluginDirSelected) ? IDC_PLUGIN_OTHER : IDC_PLUGIN_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,_Settings->LoadDword(UseSaveDirSelected) ? IDC_AUTO_OTHER : IDC_AUTO_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,_Settings->LoadDword(UseInstantDirSelected) ? IDC_INSTANT_OTHER : IDC_INSTANT_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,_Settings->LoadDword(UseSnapShotDirSelected) ? IDC_SNAP_OTHER : IDC_SNAP_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,TexturePath.empty() ? IDC_TEXTURE_DEFAULT : IDC_TEXTURE_OTHER),BM_SETCHECK, BST_CHECKED,0); SetDlgItemText(hDlg,IDC_PLUGIN_DIR,_Settings->LoadString(SelectedPluginDirectory).c_str()); SetDlgItemText(hDlg,IDC_INSTANT_DIR,_Settings->LoadString(SelectedInstantSaveDirectory).c_str()); SetDlgItemText(hDlg,IDC_AUTO_DIR,_Settings->LoadString(SelectedSaveDirectory).c_str()); SetDlgItemText(hDlg,IDC_SNAP_DIR,_Settings->LoadString(SelectedSnapShotDir).c_str()); SetDlgItemText(hDlg,IDC_TEXTURE_DIR,TexturePath.empty() ? _Settings->LoadString(InitialTextureDir).c_str() : TexturePath.c_str()); //Set Text language for the dialog box SetDlgItemText(hDlg,IDC_DIR_FRAME1,GS(DIR_PLUGIN)); SetDlgItemText(hDlg,IDC_DIR_FRAME3,GS(DIR_AUTO_SAVE)); SetDlgItemText(hDlg,IDC_DIR_FRAME4,GS(DIR_INSTANT_SAVE)); SetDlgItemText(hDlg,IDC_DIR_FRAME5,GS(DIR_SCREEN_SHOT)); SetDlgItemText(hDlg,IDC_DIR_TEXTURE_FRAME,GS(DIR_TEXTURE)); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_SELECT_PLUGIN_DIR: case IDC_SELECT_INSTANT_DIR: case IDC_SELECT_AUTO_DIR: case IDC_SELECT_SNAP_DIR: case IDC_SELECT_TEXTURE_DIR: { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); char Buffer[MAX_PATH], Directory[255]; LPITEMIDLIST pidl; BROWSEINFO bi; //get the title of the select box char Title[255]; switch (LOWORD(wParam)) { case IDC_SELECT_PLUGIN_DIR: strcpy(Title,GS(DIR_SELECT_PLUGIN)); break; case IDC_SELECT_AUTO_DIR: strcpy(Title,GS(DIR_SELECT_AUTO)); break; case IDC_SELECT_INSTANT_DIR: strcpy(Title,GS(DIR_SELECT_INSTANT)); break; case IDC_SELECT_SNAP_DIR: strcpy(Title,GS(DIR_SELECT_SCREEN)); break; case IDC_SELECT_TEXTURE_DIR: strcpy(Title,GS(DIR_SELECT_TEXTURE)); break; } //Get the initial Dir char InitialDir[_MAX_PATH]; switch (LOWORD(wParam)) { case IDC_SELECT_PLUGIN_DIR: GetDlgItemText(hDlg,IDC_PLUGIN_DIR,InitialDir,sizeof(InitialDir)); break; case IDC_SELECT_AUTO_DIR: GetDlgItemText(hDlg,IDC_AUTO_DIR,InitialDir,sizeof(InitialDir)); break; case IDC_SELECT_INSTANT_DIR: GetDlgItemText(hDlg,IDC_INSTANT_DIR,InitialDir,sizeof(InitialDir)); break; case IDC_SELECT_SNAP_DIR: GetDlgItemText(hDlg,IDC_SNAP_DIR,InitialDir,sizeof(InitialDir)); break; case IDC_SELECT_TEXTURE_DIR: GetDlgItemText(hDlg,IDC_TEXTURE_DIR,InitialDir,sizeof(InitialDir)); break; } bi.hwndOwner = hDlg; bi.pidlRoot = NULL; bi.pszDisplayName = Buffer; bi.lpszTitle = Title; bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS; bi.lpfn = (BFFCALLBACK)SelectDirCallBack; bi.lParam = (DWORD)InitialDir; if ((pidl = SHBrowseForFolder(&bi)) != NULL) { if (SHGetPathFromIDList(pidl, Directory)) { int len = strlen(Directory); if (Directory[len - 1] != '\\') { strcat(Directory,"\\"); } switch (LOWORD(wParam)) { case IDC_SELECT_PLUGIN_DIR: SetDlgItemText(hDlg,IDC_PLUGIN_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_PLUGIN_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_PLUGIN_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_INSTANT_DIR: SetDlgItemText(hDlg,IDC_INSTANT_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_INSTANT_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_INSTANT_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_AUTO_DIR: SetDlgItemText(hDlg,IDC_AUTO_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_AUTO_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_AUTO_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_SNAP_DIR: SetDlgItemText(hDlg,IDC_SNAP_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_SNAP_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_SNAP_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_TEXTURE_DIR: SetDlgItemText(hDlg,IDC_TEXTURE_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_TEXTURE_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_TEXTURE_OTHER),BM_SETCHECK, BST_CHECKED,0); break; } SendMessage(GetParent(hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } } } break; } break; case WM_NOTIFY: if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); //Current Dir stdstr strRomDir = _Settings->LoadString(RomDirectory); //Save all selected dirs char String[300]; GetDlgItemText(hDlg,IDC_PLUGIN_DIR,String,sizeof(String)); _Settings->SaveString(SelectedPluginDirectory,String); GetDlgItemText(hDlg,IDC_AUTO_DIR,String,sizeof(String)); _Settings->SaveString(SelectedSaveDirectory,String); GetDlgItemText(hDlg,IDC_INSTANT_DIR,String,sizeof(String)); _Settings->SaveString(SelectedInstantSaveDirectory,String); GetDlgItemText(hDlg,IDC_SNAP_DIR,String,sizeof(String)); _Settings->SaveString(SelectedSnapShotDir,String); if (SendMessage(GetDlgItem(hDlg,IDC_TEXTURE_DEFAULT),BM_GETSTATE, 0,0) != BST_CHECKED) { GetDlgItemText(hDlg,IDC_TEXTURE_DIR,String,sizeof(String)); _Settings->SaveString(TextureDir,String); } else { _Settings->SaveString(TextureDir,""); } //Save if using selected _Settings->SaveDword(UsePluginDirSelected,SendMessage(GetDlgItem(hDlg,IDC_PLUGIN_DEFAULT),BM_GETSTATE, 0,0) != BST_CHECKED); _Settings->SaveDword(UseSaveDirSelected,SendMessage(GetDlgItem(hDlg,IDC_AUTO_DEFAULT),BM_GETSTATE, 0,0) != BST_CHECKED); _Settings->SaveDword(UseInstantDirSelected,SendMessage(GetDlgItem(hDlg,IDC_INSTANT_DEFAULT),BM_GETSTATE, 0,0) != BST_CHECKED); _Settings->SaveDword(UseSnapShotDirSelected,SendMessage(GetDlgItem(hDlg,IDC_SNAP_DEFAULT),BM_GETSTATE, 0,0) != BST_CHECKED); SettingID Dir; Dir = _Settings->LoadDword(UsePluginDirSelected) ? SelectedPluginDirectory : InitialPluginDirectory ; _Settings->SaveString(PluginDirectory,_Settings->LoadString(Dir).c_str()); Dir = _Settings->LoadDword(UseSaveDirSelected) ? SelectedSaveDirectory : InitialSaveDirectory ; _Settings->SaveString(SaveDirectory,_Settings->LoadString(Dir).c_str()); Dir = _Settings->LoadDword(UseInstantDirSelected) ? SelectedInstantSaveDirectory : InitialInstantSaveDirectory ; _Settings->SaveString(InstantSaveDirectory,_Settings->LoadString(Dir).c_str()); Dir = _Settings->LoadDword(UseSnapShotDirSelected) ? SelectedSnapShotDir : InitialSnapShotDir ; _Settings->SaveString(SnapShotDir,_Settings->LoadString(Dir).c_str()); } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { RemoveProp((HWND)hDlg,"Classes"); } break; case WM_CLOSE: _asm int 3 break; default: return FALSE; } return TRUE; } BOOL CALLBACK PluginSelectProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PluginList * List = NULL; int index; switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; //Set the text for all gui Items SetDlgItemText(hDlg,RSP_ABOUT,GS(PLUG_ABOUT)); SetDlgItemText(hDlg,GFX_ABOUT,GS(PLUG_ABOUT)); SetDlgItemText(hDlg,AUDIO_ABOUT,GS(PLUG_ABOUT)); SetDlgItemText(hDlg,CONT_ABOUT,GS(PLUG_ABOUT)); SetDlgItemText(hDlg,IDC_RSP_NAME,GS(PLUG_RSP)); SetDlgItemText(hDlg,IDC_GFX_NAME,GS(PLUG_GFX)); SetDlgItemText(hDlg,IDC_AUDIO_NAME,GS(PLUG_AUDIO)); SetDlgItemText(hDlg,IDC_CONT_NAME,GS(PLUG_CTRL)); SetDlgItemText(hDlg,IDC_HLE_GFX,GS(PLUG_HLE_GFX)); SetDlgItemText(hDlg,IDC_HLE_AUDIO,GS(PLUG_HLE_AUDIO)); //Create the list of plugins CPluginList Plugins(_Settings); List = new PluginList; *List = Plugins.GetPluginList(); SetProp((HWND)hDlg,"Plugin List",List); for (int count = 0; count < sizeof(Items) / sizeof(Items[0]); count++) { Items[count].CurrentPlugin = _Settings->LoadString(Items[count].Setting_ID); } //Add in all the plugins to the gui for (PluginList::iterator PluginIter = List->begin(); PluginIter != List->end(); PluginIter++) { PLUGIN * Plugin = &(*PluginIter); for (int count = 0; count < sizeof(Items) / sizeof(Items[0]); count++) { if (Plugin->info.Type != Items[count].Type) { continue; } index = SendMessage(GetDlgItem(hDlg,Items[count].ListID),CB_ADDSTRING,(WPARAM)0, (LPARAM)&Plugin->info.Name); SendMessage(GetDlgItem(hDlg,Items[count].ListID),CB_SETITEMDATA ,(WPARAM)index, (LPARAM)Plugin); //See if added plugin is currently selected if(_stricmp(Items[count].CurrentPlugin.c_str(),Plugin->FileName.c_str()) != 0) { continue; } SendMessage(GetDlgItem(hDlg,Items[count].ListID),CB_SETCURSEL,(WPARAM)index,(LPARAM)0); EnableWindow(GetDlgItem(hDlg,Items[count].AboutID),Plugin->InfoFunction); break; } } if (_Settings->LoadDword(UseHighLevelGfx)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_HLE_GFX),BM_SETCHECK, BST_CHECKED,0); } if (_Settings->LoadDword(UseHighLevelAudio)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_HLE_AUDIO),BM_SETCHECK, BST_CHECKED,0); } } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_HLE_GFX: { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); if ((SendMessage(GetDlgItem(hDlg,IDC_HLE_GFX), BM_GETSTATE, 0,0) & BST_CHECKED) == 0) { stdstr Caption(GS(MSG_SET_LLE_GFX_TITLE)),Message(GS(MSG_SET_LLE_GFX_MSG)); if (MessageBox(hDlg,Message.c_str(),Caption.c_str(),MB_OKCANCEL|MB_ICONWARNING) != IDOK) { SendMessage(GetDlgItem((HWND)hDlg,IDC_HLE_GFX),BM_SETCHECK, BST_CHECKED,0); break; } } SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; case IDC_HLE_AUDIO: { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); if ((SendMessage(GetDlgItem(hDlg,IDC_HLE_AUDIO), BM_GETSTATE, 0,0) & BST_CHECKED) != 0) { stdstr Caption(GS(MSG_SET_HLE_AUD_TITLE)),Message(GS(MSG_SET_HLE_AUD_MSG)); if (MessageBox(hDlg,Message.c_str(),Caption.c_str(),MB_OKCANCEL|MB_ICONWARNING) != IDOK) { SendMessage(GetDlgItem((HWND)hDlg,IDC_HLE_AUDIO),BM_SETCHECK, BST_UNCHECKED,0); break; } } SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; } //Highlight the about button if the plugin has the dll about function if (HIWORD(wParam) == CBN_SELCHANGE) { for (int count = 0; count < sizeof(Items) / sizeof(Items[0]); count++) { if (LOWORD(wParam) != Items[count].ListID) { continue; } index = SendMessage(GetDlgItem(hDlg,LOWORD(wParam)),CB_GETCURSEL,0,0); if (index == CB_ERR) { break; } PLUGIN * Plugin = (PLUGIN *)SendMessage(GetDlgItem(hDlg,LOWORD(wParam)),CB_GETITEMDATA,(WPARAM)index,0); EnableWindow(GetDlgItem(hDlg,Items[count].AboutID),Plugin->InfoFunction); break; } SendMessage(GetParent(hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } else { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); //Check for about button pressed for (int count = 0; count < sizeof(Items) / sizeof(Items[0]); count++) { if (LOWORD(wParam) != Items[count].AboutID) { continue; } index = SendMessage(GetDlgItem(hDlg,Items[count].ListID),CB_GETCURSEL,0,0); PLUGIN * Plugin = (PLUGIN *)SendMessage(GetDlgItem(hDlg,Items[count].ListID),CB_GETITEMDATA,(WPARAM)index,0); CPluginList Plugins(_Settings); Plugins.DllAbout((void *)hDlg,Plugin->FullPath.c_str()); } } break; case WM_NOTIFY: //Save each selected plugin if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); List = (PluginList *)GetProp(hDlg,"Plugin List"); bool PluginsChanged = false; for (int count = 0; count < sizeof(Items) / sizeof(Items[0]); count++) { index = SendMessage(GetDlgItem(hDlg,Items[count].ListID),CB_GETCURSEL,0,0); if (index < 0) { continue; } PLUGIN * Plugin = (PLUGIN *)SendMessage(GetDlgItem(hDlg,Items[count].ListID),CB_GETITEMDATA,(WPARAM)index,0); if (_Settings->LoadString(Items[count].Setting_ID) != Plugin->FileName.c_str()) { PluginsChanged = true; _Settings->SaveString(Items[count].Setting_ID,Plugin->FileName.c_str()); _Settings->SaveDword(Items[count].ChangeSettingID,true); } } if (_Settings->LoadDword(UseHighLevelGfx) != SendMessage(GetDlgItem(hDlg,IDC_HLE_GFX), BM_GETSTATE, 0,0) == BST_CHECKED) { _Settings->SaveDword(UseHighLevelGfx, SendMessage(GetDlgItem(hDlg,IDC_HLE_GFX), BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(Items[0].ChangeSettingID,true); PluginsChanged = true; } if (_Settings->LoadDword(UseHighLevelAudio) != SendMessage(GetDlgItem(hDlg,IDC_HLE_AUDIO), BM_GETSTATE, 0,0) == BST_CHECKED) { _Settings->SaveDword(UseHighLevelAudio,SendMessage(GetDlgItem(hDlg,IDC_HLE_AUDIO),BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(Items[0].ChangeSettingID,true); PluginsChanged = true; } if (PluginsChanged) { if (_Settings->LoadDword(CPU_Running) != 0) { Classes->System->ExternalEvent(ChangePlugins); } else { Classes->System->Plugins()->Reset(); Classes->Gui->RefreshMenu(); } } } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { List = (PluginList *)GetProp(hDlg,"Plugin List"); delete List; RemoveProp((HWND)hDlg,"Plugin List"); RemoveProp((HWND)hDlg,"Classes"); } break; default: return false; } return true; } bool RomBrowserConfig_FieldsChanged (HWND hDlg,ROMBROWSER_FIELDS_LIST * Fields) { int ItemsSelected = 0; for (int count = 0; count < Fields->size(); count++) { if ((*Fields)[count].Pos >= 0) { ItemsSelected += 1; } } int listCount = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_GETCOUNT,0,0); if (listCount != ItemsSelected) { return true; } for (int Item = 0; Item < listCount; Item ++ ){ int Pos = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETITEMDATA,Item,0); if ((*Fields)[Pos].Pos != Item) { return true; }; } return false; } int CALLBACK RomBrowserConfigProc (DWORD hDlg, DWORD uMsg, DWORD wParam, DWORD lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; if (_Settings->LoadDword(RomBrowser)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_USE_ROMBROWSER),BM_SETCHECK, BST_CHECKED,0); } if (_Settings->LoadDword(RomBrowserRecursive)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_RECURSION),BM_SETCHECK, BST_CHECKED,0); } ROMBROWSER_FIELDS_LIST * Fields = &Classes->Gui->m_Fields; for (int count = 0; count < Fields->size(); count ++) { int Pos = (*Fields)[count].Pos; if (Pos < 0) { int index = SendDlgItemMessage((HWND)hDlg,IDC_AVALIABLE,LB_ADDSTRING,0,(LPARAM)GS((*Fields)[count].LangID)); SendDlgItemMessage((HWND)hDlg,IDC_AVALIABLE,LB_SETITEMDATA,index,count); continue; } int listCount = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_GETCOUNT,0,0); if (Pos > listCount) { Pos = listCount; } int index = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_INSERTSTRING,Pos,(LPARAM)GS((*Fields)[count].LangID)); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_SETITEMDATA,index,count); } //char String[256]; //sprintf(String,"%d",_Settings->LoadDword(RememberedRomFilesCount)); //SetDlgItemText((HWND)hDlg,IDC_REMEMBER,String); //sprintf(String,"%d",_Settings->LoadDword(RememberedRomDir)); //SetDlgItemText((HWND)hDlg,IDC_REMEMBERDIR,String); Notify().BreakPoint(__FILE__,__LINE__); SetDlgItemText((HWND)hDlg,IDC_ROMSEL_TEXT1,GS(RB_MAX_ROMS)); SetDlgItemText((HWND)hDlg,IDC_ROMSEL_TEXT2,GS(RB_ROMS)); SetDlgItemText((HWND)hDlg,IDC_ROMSEL_TEXT3,GS(RB_MAX_DIRS)); SetDlgItemText((HWND)hDlg,IDC_ROMSEL_TEXT4,GS(RB_DIRS)); SetDlgItemText((HWND)hDlg,IDC_USE_ROMBROWSER,GS(RB_USE)); // SetDlgItemText((HWND)hDlg,IDC_REFRESH_BROSWER,GS(RB_REFRESH)); SetDlgItemText((HWND)hDlg,IDC_RECURSION,GS(RB_DIR_RECURSION)); SetDlgItemText((HWND)hDlg,IDC_ROMSEL_TEXT5,GS(RB_AVALIABLE_FIELDS)); SetDlgItemText((HWND)hDlg,IDC_ROMSEL_TEXT6,GS(RB_SHOW_FIELDS)); SetDlgItemText((HWND)hDlg,IDC_ADD,GS(RB_ADD)); SetDlgItemText((HWND)hDlg,IDC_REMOVE,GS(RB_REMOVE)); SetDlgItemText((HWND)hDlg,IDC_UP,GS(RB_UP)); SetDlgItemText((HWND)hDlg,IDC_DOWN,GS(RB_DOWN)); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_ADD: { char String[100]; int index, listCount, Data; index = SendMessage(GetDlgItem((HWND)hDlg,IDC_AVALIABLE),LB_GETCURSEL,0,0); if (index < 0) { break; } SendMessage(GetDlgItem((HWND)hDlg,IDC_AVALIABLE),LB_GETTEXT,index,(LPARAM)String); Data = SendMessage(GetDlgItem((HWND)hDlg,IDC_AVALIABLE),LB_GETITEMDATA,index,0); SendDlgItemMessage((HWND)hDlg,IDC_AVALIABLE,LB_DELETESTRING,index,0); listCount = SendDlgItemMessage((HWND)hDlg,IDC_AVALIABLE,LB_GETCOUNT,0,0); if (index >= listCount) { index -= 1;} SendDlgItemMessage((HWND)hDlg,IDC_AVALIABLE,LB_SETCURSEL,index,0); index = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_ADDSTRING,0,(LPARAM)String); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_SETITEMDATA,index,Data); } break; case IDC_REMOVE: { char String[100]; int index, listCount, Data; index = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETCURSEL,0,0); if (index < 0) { break; } SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETTEXT,index,(LPARAM)String); Data = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETITEMDATA,index,0); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_DELETESTRING,index,0); listCount = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_GETCOUNT,0,0); if (index >= listCount) { index -= 1;} SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_SETCURSEL,index,0); index = SendDlgItemMessage((HWND)hDlg,IDC_AVALIABLE,LB_ADDSTRING,0,(LPARAM)String); SendDlgItemMessage((HWND)hDlg,IDC_AVALIABLE,LB_SETITEMDATA,index,Data); } break; case IDC_UP: { char String[100]; int index, Data; index = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETCURSEL,0,0); if (index <= 0) { break; } SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETTEXT,index,(LPARAM)String); Data = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETITEMDATA,index,0); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_DELETESTRING,index,0); index = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_INSERTSTRING,index - 1,(LPARAM)String); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_SETCURSEL,index,0); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_SETITEMDATA,index,Data); } break; case IDC_DOWN: { char String[100]; int index,listCount,Data; index = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETCURSEL,0,0); if (index < 0) { break; } listCount = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_GETCOUNT,0,0); if ((index + 1) == listCount) { break; } SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETTEXT,index,(LPARAM)String); Data = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETITEMDATA,index,0); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_DELETESTRING,index,0); index = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_INSERTSTRING,index + 1,(LPARAM)String); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_SETCURSEL,index,0); SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_SETITEMDATA,index,Data); } break; case IDC_REMEMBER: case IDC_REMEMBERDIR: if (HIWORD(wParam) != EN_CHANGE) { break; } case IDC_USE_ROMBROWSER: // case IDC_REFRESH_BROSWER: case IDC_RECURSION: SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); break; } { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); if (RomBrowserConfig_FieldsChanged((HWND)hDlg,&Classes->Gui->m_Fields)) { SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } } break; case WM_NOTIFY: //Save each selected plugin if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); bool ResetMenu = false; Notify().BreakPoint(__FILE__,__LINE__); /*int OldRememberedRomFiles = _Settings->LoadDword(RememberedRomFilesCount); int RomsToRemember = GetDlgItemInt((HWND)hDlg,IDC_REMEMBER,NULL,FALSE); if (OldRememberedRomFiles != RomsToRemember) { if (RomsToRemember < 0) { RomsToRemember = 0; } if (RomsToRemember > MaxRememberedFiles) { RomsToRemember = MaxRememberedFiles; } _Settings->SaveDword(RememberedRomFilesCount,RomsToRemember); ResetMenu = true; //Reset the amount to the max on the gui char String[100]; sprintf(String,"%d",RomsToRemember); SetDlgItemText((HWND)hDlg,IDC_REMEMBER,String); } int OldRememberedRomDirs = _Settings->LoadDword(RememberedRomDir); int DirsToRemember = GetDlgItemInt((HWND)hDlg,IDC_REMEMBERDIR,NULL,FALSE); if (OldRememberedRomDirs != DirsToRemember) { if (DirsToRemember < 0) { DirsToRemember = 0; } if (DirsToRemember > MaxRememberedDirs) { DirsToRemember = MaxRememberedDirs; } _Settings->SaveDword(RememberedRomDir,DirsToRemember); ResetMenu = true; //Reset the amount to the max on the gui char String[100]; sprintf(String,"%d",DirsToRemember); SetDlgItemText((HWND)hDlg,IDC_REMEMBERDIR,String); }*/ //Get the field information ROMBROWSER_FIELDS_LIST * Fields = &Classes->Gui->m_Fields; bool ResetColoums = false; bool RefreshData = false; //Handle changes in fields if (RomBrowserConfig_FieldsChanged((HWND)hDlg,Fields)) { //So we save the correct coloumn widths Classes->Gui->SaveRomListColoumnInfo(); //Modify the Field List to have the new fields used for (int count = 0; count < Fields->size(); count ++) { (*Fields)[count].Pos = -1; } int listCount = SendDlgItemMessage((HWND)hDlg,IDC_USING,LB_GETCOUNT,0,0); for (int Item = 0; Item < listCount; Item ++ ){ int Pos = SendMessage(GetDlgItem((HWND)hDlg,IDC_USING),LB_GETITEMDATA,Item,0); (*Fields)[Pos].Pos = Item; } //Reset the Rom Browser to see any changes ResetColoums = true; RefreshData = true; } //Handle recursion bool Recursion = SendMessage(GetDlgItem((HWND)hDlg,IDC_RECURSION),BM_GETSTATE, 0,0) == BST_CHECKED?true:false; if (Recursion != (_Settings->LoadDword(RomBrowserRecursive) != 0)) { _Settings->SaveDword(RomBrowserRecursive,(DWORD)Recursion); RefreshData = true; } bool HaveRomBrowser = SendMessage(GetDlgItem((HWND)hDlg,IDC_USE_ROMBROWSER),BM_GETSTATE, 0,0) == BST_CHECKED?true:false; if (HaveRomBrowser != (_Settings->LoadDword(RomBrowser) != 0)) { _Settings->SaveDword(RomBrowser,(DWORD)HaveRomBrowser); ResetMenu = true; if (HaveRomBrowser) { Classes->Gui->ShowRomList(); ResetColoums = true; RefreshData = true; } else { Classes->Gui->HideRomList(); ResetColoums = false; RefreshData = false; } } if (ResetMenu) { Classes->Gui->GetNotifyClass()->RefreshMenu(); } if (ResetColoums) { Classes->Gui->ResetRomBrowserColomuns(); Classes->Gui->SaveRomListColoumnInfo(); } if (RefreshData) { Classes->Gui->RefreshRomBrowser(); Classes->Gui->HighLightLastRom(); } } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { RemoveProp((HWND)hDlg,"Classes"); } break; default: return false; } return true; } BOOL CALLBACK GeneralOptionsProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; if (_Settings->LoadDword(AutoSleep)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_AUTOSLEEP),BM_SETCHECK, BST_CHECKED,0); } if (_Settings->LoadDword(AutoFullScreen)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_LOAD_FULLSCREEN),BM_SETCHECK, BST_CHECKED,0); } if (_Settings->LoadDword(RememberCheats)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_REMEMBER_CHEAT),BM_SETCHECK, BST_CHECKED,0); } if (_Settings->LoadDword(DisableScrSaver)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_SCREEN_SAVER),BM_SETCHECK, BST_CHECKED,0); } if (_Settings->LoadDword(BasicMode)) { SendMessage(GetDlgItem((HWND)hDlg,IDC_BASIC_MODE),BM_SETCHECK, BST_CHECKED,0); } if (_Settings->LoadDword(DisplayFrameRate)){ SendMessage(GetDlgItem((HWND)hDlg,IDC_DISPLAY_FRAMERATE),BM_SETCHECK, BST_CHECKED,0); } SetDlgItemText((HWND)hDlg,IDC_AUTOSLEEP, GS(OPTION_AUTO_SLEEP)); SetDlgItemText((HWND)hDlg,IDC_LOAD_FULLSCREEN, GS(OPTION_AUTO_FULLSCREEN)); SetDlgItemText((HWND)hDlg,IDC_BASIC_MODE, GS(OPTION_BASIC_MODE)); SetDlgItemText((HWND)hDlg,IDC_REMEMBER_CHEAT, GS(OPTION_REMEMBER_CHEAT)); SetDlgItemText((HWND)hDlg,IDC_SCREEN_SAVER, GS(OPTION_DISABLE_SS)); SetDlgItemText((HWND)hDlg,IDC_DISPLAY_FRAMERATE, GS(OPTION_DISPLAY_FR)); DWORD FRDisplayType = _Settings->LoadDword(FrameDisplayType); AddDropDownItem(hDlg,IDC_FRAME_DISPLAY_TYPE,GS(STR_FR_VIS),FR_VIs,&FRDisplayType); AddDropDownItem(hDlg,IDC_FRAME_DISPLAY_TYPE,GS(STR_FR_DLS),FR_DLs,&FRDisplayType); AddDropDownItem(hDlg,IDC_FRAME_DISPLAY_TYPE,GS(STR_FR_PERCENT),FR_PERCENT,&FRDisplayType); ShowWindow(GetDlgItem((HWND)hDlg,IDC_FRAME_DISPLAY_TYPE),SendMessage(GetDlgItem(hDlg,IDC_DISPLAY_FRAMERATE),BM_GETSTATE, 0,0) == BST_CHECKED ? SW_SHOW : SW_HIDE); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_FRAME_DISPLAY_TYPE: if (HIWORD(wParam) == LBN_SELCHANGE) { SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; case IDC_AUTOSLEEP: case IDC_LOAD_FULLSCREEN: case IDC_BASIC_MODE: case IDC_REMEMBER_CHEAT: case IDC_SCREEN_SAVER: SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); break; case IDC_DISPLAY_FRAMERATE: SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); ShowWindow(GetDlgItem((HWND)hDlg,IDC_FRAME_DISPLAY_TYPE),(SendMessage(GetDlgItem(hDlg,IDC_DISPLAY_FRAMERATE),BM_GETSTATE, 0,0) & BST_CHECKED) == BST_CHECKED ? SW_SHOW : SW_HIDE); break; } break; case WM_NOTIFY: //Save each selected plugin if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); bool WasBasicMode = _Settings->LoadDword(BasicMode) != 0; //Save if using selected _Settings->SaveDword(AutoSleep, SendMessage(GetDlgItem(hDlg,IDC_AUTOSLEEP), BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(AutoFullScreen, SendMessage(GetDlgItem(hDlg,IDC_LOAD_FULLSCREEN), BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(BasicMode, SendMessage(GetDlgItem(hDlg,IDC_BASIC_MODE), BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(RememberCheats, SendMessage(GetDlgItem(hDlg,IDC_REMEMBER_CHEAT), BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(DisableScrSaver, SendMessage(GetDlgItem(hDlg,IDC_SCREEN_SAVER), BM_GETSTATE, 0,0) == BST_CHECKED); _Settings->SaveDword(DisplayFrameRate,SendMessage(GetDlgItem(hDlg,IDC_DISPLAY_FRAMERATE),BM_GETSTATE, 0,0) == BST_CHECKED); int indx = SendDlgItemMessage(hDlg,IDC_FRAME_DISPLAY_TYPE,CB_GETCURSEL,0,0); _Settings->SaveDword(FrameDisplayType,SendDlgItemMessage(hDlg,IDC_FRAME_DISPLAY_TYPE,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); if (WasBasicMode != (_Settings->LoadDword(BasicMode) != 0)) { if (WasBasicMode && !((LPPSHNOTIFY)lParam)->lParam) { //add Advanced tabs for (int count = 0; count < (sizeof(AdvancedSettingsTabs) / sizeof(SETTINGS_TAB)); count ++) { PROPSHEETPAGE page; AdvancedSettingsTabs[count].Title = _Lang->GetString(AdvancedSettingsTabs[count].LanguageID); page.dwSize = sizeof(PROPSHEETPAGE); page.dwFlags = PSP_USETITLE; page.hInstance = GetModuleHandle(NULL); page.pszTemplate = MAKEINTRESOURCE(AdvancedSettingsTabs[count].TemplateID); page.pfnDlgProc = AdvancedSettingsTabs[count].pfnDlgProc; page.pszTitle = AdvancedSettingsTabs[count].Title.c_str(); page.lParam = (DWORD)Classes; page.pfnCallback = NULL; PropSheet_AddPage(GetParent(hDlg),CreatePropertySheetPage(&page)); } } if (!WasBasicMode && !((LPPSHNOTIFY)lParam)->lParam) { int MinPages = (sizeof(BasicSettingsTabs) / sizeof(SETTINGS_TAB)); if (_Settings->LoadString(ROM_NAME).length() > 0) { MinPages += (sizeof(RomSettingsTabs) / sizeof(SETTINGS_TAB)); } for (int count = MaxConfigPages; count >= MinPages; count --) { PropSheet_RemovePage(GetParent(hDlg),count,0); } } Classes->Gui->RefreshMenu(); } } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { RemoveProp((HWND)hDlg,"Classes"); } break; default: return false; } return true; } BOOL CALLBACK RomSettingsProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; SetDlgItemText(hDlg,IDC_CPU_TYPE_TEXT,GS(ROM_CPU_STYLE)); SetDlgItemText(hDlg,IDC_FUNCFIND_TEXT,GS(ROM_FUNC_FIND)); SetDlgItemText(hDlg,IDC_MEMORY_SIZE_TEXT,GS(ROM_MEM_SIZE)); SetDlgItemText(hDlg,IDC_BLOCK_LINKING_TEXT,GS(ROM_ABL)); SetDlgItemText(hDlg,IDC_SAVE_TYPE_TEXT,GS(ROM_SAVE_TYPE)); // SetDlgItemText(hDlg,IDC_COUNTFACT_TEXT,GS(ROM_COUNTER_FACTOR)); SetDlgItemText(hDlg,IDC_GOOD_NAME,_Settings->LoadString(ROM_GoodName).c_str()); DWORD CPU_Type = _Settings->LoadDword(ROM_CPUType); AddDropDownItem(hDlg,IDC_CPU_TYPE,GS(ROM_DEFAULT), CPU_Default, &CPU_Type); AddDropDownItem(hDlg,IDC_CPU_TYPE,GS(CORE_INTERPTER), CPU_Interpreter,&CPU_Type); AddDropDownItem(hDlg,IDC_CPU_TYPE,GS(CORE_RECOMPILER),CPU_Recompiler, &CPU_Type); if (_Settings->LoadDword(Debugger)) { AddDropDownItem(hDlg,IDC_CPU_TYPE,GS(CORE_SYNC), CPU_SyncCores, &CPU_Type); } DWORD FunctionLookup = _Settings->LoadDword(ROM_FunctionLookup); AddDropDownItem(hDlg,IDC_FUNCFIND,GS(ROM_DEFAULT),FuncFind_Default,&FunctionLookup); AddDropDownItem(hDlg,IDC_FUNCFIND,GS(FLM_PLOOKUP),FuncFind_PhysicalLookup,&FunctionLookup); AddDropDownItem(hDlg,IDC_FUNCFIND,GS(FLM_VLOOKUP),FuncFind_VirtualLookup,&FunctionLookup); //AddDropDownItem(hDlg,IDC_FUNCFIND,GS(FLM_CHANGEMEM),FuncFind_ChangeMemory,&FunctionLookup); DWORD RomRamSize = _Settings->LoadDword(ROM_RamSize); AddDropDownItem(hDlg,IDC_RDRAM_SIZE,GS(ROM_DEFAULT),-1,&RomRamSize); AddDropDownItem(hDlg,IDC_RDRAM_SIZE,GS(RDRAM_4MB),4,&RomRamSize); AddDropDownItem(hDlg,IDC_RDRAM_SIZE,GS(RDRAM_8MB),8,&RomRamSize); DWORD RomUseLinking = _Settings->LoadDword(ROM_BlockLinking); AddDropDownItem(hDlg,IDC_BLOCK_LINKING,GS(ROM_DEFAULT),-1,&RomUseLinking); AddDropDownItem(hDlg,IDC_BLOCK_LINKING,GS(ABL_ON),1,&RomUseLinking); AddDropDownItem(hDlg,IDC_BLOCK_LINKING,GS(ABL_OFF),0,&RomUseLinking); DWORD RomSaveUsing = _Settings->LoadDword(ROM_SaveChip); AddDropDownItem(hDlg,IDC_SAVE_TYPE,GS(SAVE_FIRST_USED),SaveChip_Auto, &RomSaveUsing); AddDropDownItem(hDlg,IDC_SAVE_TYPE,GS(SAVE_4K_EEPROM), SaveChip_Eeprom_4K, &RomSaveUsing); AddDropDownItem(hDlg,IDC_SAVE_TYPE,GS(SAVE_16K_EEPROM),SaveChip_Eeprom_16K,&RomSaveUsing); AddDropDownItem(hDlg,IDC_SAVE_TYPE,GS(SAVE_SRAM), SaveChip_Sram, &RomSaveUsing); AddDropDownItem(hDlg,IDC_SAVE_TYPE,GS(SAVE_FLASHRAM), SaveChip_FlashRam, &RomSaveUsing); DWORD RomCF = _Settings->LoadDword(ROM_CounterFactor); AddDropDownItem(hDlg,IDC_COUNTFACT,GS(ROM_DEFAULT),-1,&RomCF); AddDropDownItem(hDlg,IDC_COUNTFACT,GS(NUMBER_1),1,&RomCF); AddDropDownItem(hDlg,IDC_COUNTFACT,GS(NUMBER_2),2,&RomCF); AddDropDownItem(hDlg,IDC_COUNTFACT,GS(NUMBER_3),3,&RomCF); AddDropDownItem(hDlg,IDC_COUNTFACT,GS(NUMBER_4),4,&RomCF); AddDropDownItem(hDlg,IDC_COUNTFACT,GS(NUMBER_5),5,&RomCF); AddDropDownItem(hDlg,IDC_COUNTFACT,GS(NUMBER_6),6,&RomCF); SetFlagControl(hDlg,_Settings->LoadDword(ROM_SyncAudio) != 0, IDC_SYNC_AUDIO, GS(ROM_SYNC_AUDIO)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_UseTlb) != 0, IDC_USE_TLB, GS(ROM_USE_TLB)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_RegCache) != 0, IDC_ROM_REGCACHE, GS(ROM_REG_CACHE)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_DelaySI) != 0, IDC_DELAY_SI, GS(ROM_DELAY_SI)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_AudioSignal) != 0, IDC_AUDIO_SIGNAL, GS(ROM_AUDIO_SIGNAL)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_SPHack) != 0, IDC_ROM_SPHACK, GS(ROM_SP_HACK)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_FixedAudio) != 0, IDC_ROM_FIXEDAUDIO, GS(ROM_FIXED_AUDIO)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_CustomSMM) != 0, IDC_CUSTOM_SMM, GS(ROM_CUSTOM_SMM)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_SMM_Cache) != 0, IDC_SMM_CACHE, GS(ADVANCE_SMM_CACHE)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_SMM_PIDMA) != 0, IDC_SMM_DMA, GS(ADVANCE_SMM_PIDMA)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_SMM_TLB) != 0, IDC_SMM_TLB, GS(ADVANCE_SMM_TLB)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_SMM_Protect) != 0, IDC_SMM_PROTECT, GS(ADVANCE_SMM_PROTECT)); SetFlagControl(hDlg,_Settings->LoadDword(ROM_SMM_ValidFunc)!= 0, IDC_SMM_VALIDATE, GS(ADVANCE_SMM_VALIDATE)); bool UseCustomSMM = _Settings->LoadDword(ROM_CustomSMM) != 0; EnableWindow(GetDlgItem(hDlg,IDC_SMM_FRAME),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_CACHE),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_DMA),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_TLB),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_PROTECT),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_VALIDATE),UseCustomSMM ? TRUE : FALSE); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CPU_TYPE: case IDC_RDRAM_SIZE: case IDC_SAVE_TYPE: case IDC_COUNTFACT: if (HIWORD(wParam) == LBN_SELCHANGE) { SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; case IDC_CUSTOM_SMM: { int MSGState = SendMessage(GetDlgItem(hDlg,IDC_CUSTOM_SMM),BM_GETSTATE, 0,0); bool UseCustomSMM = (SendMessage(GetDlgItem(hDlg,IDC_CUSTOM_SMM),BM_GETSTATE, 0,0) & BST_CHECKED) == BST_CHECKED; EnableWindow(GetDlgItem(hDlg,IDC_SMM_FRAME),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_CACHE),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_DMA),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_TLB),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_PROTECT),UseCustomSMM ? TRUE : FALSE); EnableWindow(GetDlgItem(hDlg,IDC_SMM_VALIDATE),UseCustomSMM ? TRUE : FALSE); SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; case IDC_CACHE: //case IDC_LINKED: //case IDC_PI_DMA: case IDC_TLB: //case IDC_PROTECT: //case IDC_VALIDATE: //case IDC_VALIDATE_FUNCTION: case IDC_USE_TLB: case IDC_BLOCK_LINKING: // case IDC_DELAY_DLIST: case IDC_DELAY_SI: SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); break; } break; case WM_NOTIFY: if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); int indx = SendDlgItemMessage(hDlg,IDC_CPU_TYPE,CB_GETCURSEL,0,0); _Settings->SaveDword(ROM_CPUType,SendDlgItemMessage(hDlg,IDC_CPU_TYPE,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_RDRAM_SIZE,CB_GETCURSEL,0,0); _Settings->SaveDword(ROM_RamSize,SendDlgItemMessage(hDlg,IDC_RDRAM_SIZE,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_SAVE_TYPE,CB_GETCURSEL,0,0); _Settings->SaveDword(ROM_SaveChip,SendDlgItemMessage(hDlg,IDC_SAVE_TYPE,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_FUNCFIND,CB_GETCURSEL,0,0); _Settings->SaveDword(ROM_FunctionLookup,SendDlgItemMessage(hDlg,IDC_FUNCFIND,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_COUNTFACT,CB_GETCURSEL,0,0); _Settings->SaveDword(ROM_CounterFactor,SendDlgItemMessage(hDlg,IDC_COUNTFACT,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); indx = SendDlgItemMessage(hDlg,IDC_BLOCK_LINKING,CB_GETCURSEL,0,0); _Settings->SaveDword(ROM_BlockLinking,SendDlgItemMessage(hDlg,IDC_BLOCK_LINKING,CB_GETITEMDATA,indx >= 0 ? indx : 0,0)); _Settings->SaveDword(ROM_SyncAudio, (SendMessage(GetDlgItem(hDlg,IDC_SYNC_AUDIO), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_UseTlb, (SendMessage(GetDlgItem(hDlg,IDC_USE_TLB), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_RegCache, (SendMessage(GetDlgItem(hDlg,IDC_ROM_REGCACHE), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_DelaySI, (SendMessage(GetDlgItem(hDlg,IDC_DELAY_SI), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_AudioSignal, (SendMessage(GetDlgItem(hDlg,IDC_AUDIO_SIGNAL), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_SPHack, (SendMessage(GetDlgItem(hDlg,IDC_ROM_SPHACK), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_FixedAudio, (SendMessage(GetDlgItem(hDlg,IDC_ROM_FIXEDAUDIO), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_CustomSMM, (SendMessage(GetDlgItem(hDlg,IDC_CUSTOM_SMM), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_SMM_Cache, (SendMessage(GetDlgItem(hDlg,IDC_SMM_CACHE), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_SMM_PIDMA, (SendMessage(GetDlgItem(hDlg,IDC_SMM_DMA), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_SMM_TLB, (SendMessage(GetDlgItem(hDlg,IDC_SMM_TLB), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_SMM_Protect, (SendMessage(GetDlgItem(hDlg,IDC_SMM_PROTECT), BM_GETSTATE, 0,0) == BST_CHECKED)); _Settings->SaveDword(ROM_SMM_ValidFunc,(SendMessage(GetDlgItem(hDlg,IDC_SMM_VALIDATE), BM_GETSTATE, 0,0) == BST_CHECKED)); } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { RemoveProp((HWND)hDlg,"Classes"); } break; default: return false; } return true; } BOOL CALLBACK RomStatusProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetProp((HWND)hDlg,"Classes",(SETTING_CLASSES *)ps->lParam); SETTING_CLASSES * Classes = (SETTING_CLASSES *)ps->lParam; SetDlgItemText(hDlg,IDC_STATUS_TEXT,GS(RB_STATUS)); SetDlgItemText(hDlg,IDC_NOTES_CORE_TEXT,GS(RB_NOTES_CORE)); SetDlgItemText(hDlg,IDC_NOTES_PLUGIN_TEXT,GS(RB_NOTES_PLUGIN)); CIniFile RomIniFile (_Settings->LoadString(RomDatabaseFile).c_str()); strlist Keys; RomIniFile.GetKeyList("Rom Status",Keys); stdstr Status = _Settings->LoadString(ROM_Status); for (strlist::iterator item = Keys.begin(); item != Keys.end(); item++ ) { if (strstr(item->c_str(),".Sel") != NULL) { continue; } if (strstr(item->c_str(),".Auto") != NULL) { continue; } DWORD CurrentStatus = _stricmp(Status.c_str(),item->c_str()) == 0; AddDropDownItem(hDlg,IDC_STATUS_TYPE,item->c_str(),true,&CurrentStatus); } SetDlgItemText(hDlg,IDC_NOTES_CORE,_Settings->LoadString(ROM_CoreNotes).c_str()); SetDlgItemText(hDlg,IDC_NOTES_PLUGIN,_Settings->LoadString(ROM_PluginNotes).c_str()); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_STATUS_TYPE: if (HIWORD(wParam) == LBN_SELCHANGE) { SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } break; case IDC_NOTES_CORE: if (HIWORD(wParam) == EN_CHANGE) { char text[2000]; GetDlgItemText(hDlg,IDC_NOTES_CORE,text,sizeof(text)); if (stricmp(text,_Settings->LoadString(ROM_CoreNotes).c_str()) != 0) { SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } } case IDC_NOTES_PLUGIN: if (HIWORD(wParam) == EN_CHANGE) { char text[2000]; GetDlgItemText(hDlg,IDC_NOTES_PLUGIN,text,sizeof(text)); if (stricmp(text,_Settings->LoadString(ROM_PluginNotes).c_str()) != 0) { SendMessage(GetParent((HWND)hDlg),PSM_CHANGED ,(WPARAM)hDlg,0); } } } break; case WM_NOTIFY: if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { SETTING_CLASSES * Classes = (SETTING_CLASSES *)GetProp((HWND)hDlg,"Classes"); bool changed = false; char text[2000]; GetDlgItemText(hDlg,IDC_STATUS_TYPE,text,sizeof(text)); if (stricmp(text,_Settings->LoadString(ROM_Status).c_str()) != 0) { changed = true; } _Settings->SaveString(ROM_Status,text); GetDlgItemText(hDlg,IDC_NOTES_CORE,text,sizeof(text)); if (stricmp(text,_Settings->LoadString(ROM_CoreNotes).c_str()) != 0) { changed = true; } if (strlen(text) > 0) { _Settings->SaveString(ROM_CoreNotes,text); } else { _Settings->SaveString(ROM_CoreNotes,""); } GetDlgItemText(hDlg,IDC_NOTES_PLUGIN,text,sizeof(text)); if (stricmp(text,_Settings->LoadString(ROM_PluginNotes).c_str()) != 0) { changed = true; } if (strlen(text) > 0) { _Settings->SaveString(ROM_PluginNotes,text); } else { _Settings->SaveString(ROM_PluginNotes,""); } if (changed) { Classes->Gui->RefreshRomBrowser(); Classes->Gui->HighLightLastRom(); } } //Free allocated memory if (((NMHDR FAR *) lParam)->code == PSN_RESET || (((NMHDR FAR *) lParam)->code == PSN_APPLY && ((LPPSHNOTIFY)lParam)->lParam)) { RemoveProp((HWND)hDlg,"Classes"); } break; default: return false; } return true; } BOOL TestExtensionRegistered ( char * Extension ) { char ShortAppName[] = { "PJ64" }; HKEY hKeyResults = 0; char Association[100]; long lResult; DWORD Type, Bytes; lResult = RegOpenKey( HKEY_CLASSES_ROOT,Extension,&hKeyResults); if (lResult != ERROR_SUCCESS) { return FALSE; } Bytes = sizeof(Association); lResult = RegQueryValueEx(hKeyResults,"",0,&Type,(LPBYTE)(&Association),&Bytes); RegCloseKey(hKeyResults); if (lResult != ERROR_SUCCESS) { return FALSE; } if (strcmp(Association,ShortAppName) != 0) { return FALSE; } return TRUE; } void RegisterExtension ( char * Extension, BOOL RegisterWithPj64 ) { char ShortAppName[] = { "PJ64" }; char sKeyValue[] = { "Project 64" }; char app_path[_MAX_PATH]; char String[200]; DWORD Disposition = 0; HKEY hKeyResults = 0; long lResult; //Find Application name GetModuleFileName(NULL,app_path,sizeof(app_path)); //creates a Root entry for sKeyName lResult = RegCreateKeyEx( HKEY_CLASSES_ROOT, ShortAppName,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL, &hKeyResults,&Disposition); RegSetValueEx(hKeyResults,"",0,REG_SZ,(BYTE *)sKeyValue,sizeof(sKeyValue)); RegCloseKey(hKeyResults); // Set the command line for "MyApp". sprintf(String,"%s\\DefaultIcon",ShortAppName); lResult = RegCreateKeyEx( HKEY_CLASSES_ROOT, String,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL, &hKeyResults,&Disposition); sprintf(String,"%s",app_path); RegSetValueEx(hKeyResults,"",0,REG_SZ,(BYTE *)String,strlen(String)); RegCloseKey(hKeyResults); //set the icon for the file extension sprintf(String,"%s\\shell\\open\\command",ShortAppName); lResult = RegCreateKeyEx( HKEY_CLASSES_ROOT, String,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL, &hKeyResults,&Disposition); sprintf(String,"%s %%1",app_path); RegSetValueEx(hKeyResults,"",0,REG_SZ,(BYTE *)String,strlen(String)); RegCloseKey(hKeyResults); // creates a Root entry for passed associated with sKeyName lResult = RegCreateKeyEx( HKEY_CLASSES_ROOT, Extension,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL, &hKeyResults,&Disposition); if (RegisterWithPj64) { RegSetValueEx(hKeyResults,"",0,REG_SZ,(BYTE *)ShortAppName,sizeof(ShortAppName)); } else { RegSetValueEx(hKeyResults,"",0,REG_SZ,(BYTE *)"",1); } SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0); } BOOL CALLBACK ShellIntegrationProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { //record class for future usage LPPROPSHEETPAGE ps = (LPPROPSHEETPAGE)lParam; SetDlgItemText(hDlg,IDC_SHELL_INT_TEXT,GS(SHELL_TEXT)); if (TestExtensionRegistered(".v64")) { SendMessage(GetDlgItem(hDlg,IDC_V64),BM_SETCHECK, BST_CHECKED,0); } if (TestExtensionRegistered(".z64")) { SendMessage(GetDlgItem(hDlg,IDC_Z64),BM_SETCHECK, BST_CHECKED,0); } if (TestExtensionRegistered(".n64")) { SendMessage(GetDlgItem(hDlg,IDC_N64),BM_SETCHECK, BST_CHECKED,0); } if (TestExtensionRegistered(".rom")) { SendMessage(GetDlgItem(hDlg,IDC_ROM),BM_SETCHECK, BST_CHECKED,0); } if (TestExtensionRegistered(".jap")) { SendMessage(GetDlgItem(hDlg,IDC_JAP),BM_SETCHECK, BST_CHECKED,0); } if (TestExtensionRegistered(".pal")) { SendMessage(GetDlgItem(hDlg,IDC_PAL),BM_SETCHECK, BST_CHECKED,0); } if (TestExtensionRegistered(".usa")) { SendMessage(GetDlgItem(hDlg,IDC_USA),BM_SETCHECK, BST_CHECKED,0); } } break; case WM_NOTIFY: if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { RegisterExtension(".v64",SendMessage(GetDlgItem(hDlg,IDC_V64),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE); RegisterExtension(".z64",SendMessage(GetDlgItem(hDlg,IDC_Z64),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE); RegisterExtension(".n64",SendMessage(GetDlgItem(hDlg,IDC_N64),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE); RegisterExtension(".rom",SendMessage(GetDlgItem(hDlg,IDC_ROM),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE); RegisterExtension(".jap",SendMessage(GetDlgItem(hDlg,IDC_JAP),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE); RegisterExtension(".pal",SendMessage(GetDlgItem(hDlg,IDC_PAL),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE); RegisterExtension(".usa",SendMessage(GetDlgItem(hDlg,IDC_USA),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE); } break; default: return FALSE; } return TRUE; } #endif