win32: added Lua recent script menu items and hotkey
This commit is contained in:
parent
4b50a9ec03
commit
0b704f27a2
|
@ -244,6 +244,19 @@ void HK_StopMovie(int)
|
||||||
FCEUI_StopMovie();
|
FCEUI_StopMovie();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HK_NewLuaScriptDown(int)
|
||||||
|
{
|
||||||
|
SendMessage(MainWindow->getHWnd(), WM_COMMAND, IDC_NEW_LUA_SCRIPT, 0);
|
||||||
|
}
|
||||||
|
void HK_CloseLuaScriptsDown(int)
|
||||||
|
{
|
||||||
|
SendMessage(MainWindow->getHWnd(), WM_COMMAND, IDC_CLOSE_LUA_SCRIPTS, 0);
|
||||||
|
}
|
||||||
|
void HK_MostRecentLuaScriptDown(int)
|
||||||
|
{
|
||||||
|
SendMessage(MainWindow->getHWnd(), WM_COMMAND, IDD_LUARECENT_RESERVE_START, 0);
|
||||||
|
}
|
||||||
|
|
||||||
void HK_AutoHoldKeyDown(int) {AutoHoldPressed = true;}
|
void HK_AutoHoldKeyDown(int) {AutoHoldPressed = true;}
|
||||||
void HK_AutoHoldKeyUp(int) {AutoHoldPressed = false;}
|
void HK_AutoHoldKeyUp(int) {AutoHoldPressed = false;}
|
||||||
|
|
||||||
|
@ -582,6 +595,24 @@ void InitCustomKeys (SCustomKeys *keys)
|
||||||
keys->Rewind.page = HOTKEY_PAGE_MOVIE;
|
keys->Rewind.page = HOTKEY_PAGE_MOVIE;
|
||||||
keys->Rewind.key = NULL;
|
keys->Rewind.key = NULL;
|
||||||
|
|
||||||
|
keys->NewLuaScript.handleKeyDown = HK_NewLuaScriptDown;
|
||||||
|
keys->NewLuaScript.code = "NewLuaScript";
|
||||||
|
keys->NewLuaScript.name = L"New Lua Window";
|
||||||
|
keys->NewLuaScript.page = HOTKEY_PAGE_MOVIE;
|
||||||
|
keys->NewLuaScript.key = NULL;
|
||||||
|
|
||||||
|
keys->CloseLuaScripts.handleKeyDown = HK_CloseLuaScriptsDown;
|
||||||
|
keys->CloseLuaScripts.code = "CloseLuaScripts";
|
||||||
|
keys->CloseLuaScripts.name = L"Close Lua Windows";
|
||||||
|
keys->CloseLuaScripts.page = HOTKEY_PAGE_MOVIE;
|
||||||
|
keys->CloseLuaScripts.key = NULL;
|
||||||
|
|
||||||
|
keys->MostRecentLuaScript.handleKeyDown = HK_MostRecentLuaScriptDown;
|
||||||
|
keys->MostRecentLuaScript.code = "MostRecentLuaScript";
|
||||||
|
keys->MostRecentLuaScript.name = L"Most Recent Lua Script";
|
||||||
|
keys->MostRecentLuaScript.page = HOTKEY_PAGE_MOVIE;
|
||||||
|
keys->MostRecentLuaScript.key = NULL;
|
||||||
|
|
||||||
keys->NextSaveSlot.handleKeyDown = HK_NextSaveSlot;
|
keys->NextSaveSlot.handleKeyDown = HK_NextSaveSlot;
|
||||||
keys->NextSaveSlot.code = "NextSaveSlot";
|
keys->NextSaveSlot.code = "NextSaveSlot";
|
||||||
keys->NextSaveSlot.name = L"Next Save Slot";
|
keys->NextSaveSlot.name = L"Next Save Slot";
|
||||||
|
|
|
@ -38,7 +38,7 @@ enum HotkeyPage {
|
||||||
|
|
||||||
static LPCTSTR hotkeyPageTitle[] = {
|
static LPCTSTR hotkeyPageTitle[] = {
|
||||||
_T("Main"),
|
_T("Main"),
|
||||||
_T("Movie"),
|
_T("Movie / Tools"),
|
||||||
_T("Savestates"),
|
_T("Savestates"),
|
||||||
_T("Savestate Slots"),
|
_T("Savestate Slots"),
|
||||||
_T("Turbo"),
|
_T("Turbo"),
|
||||||
|
@ -82,6 +82,8 @@ struct SCustomKeys
|
||||||
|
|
||||||
SCustomKey Rewind;
|
SCustomKey Rewind;
|
||||||
|
|
||||||
|
SCustomKey NewLuaScript, CloseLuaScripts, MostRecentLuaScript;
|
||||||
|
|
||||||
SCustomKey ToggleFrameCounter;
|
SCustomKey ToggleFrameCounter;
|
||||||
SCustomKey ToggleFPS;
|
SCustomKey ToggleFPS;
|
||||||
SCustomKey ToggleInput;
|
SCustomKey ToggleInput;
|
||||||
|
|
|
@ -16,10 +16,9 @@
|
||||||
#include "..\lua-engine.h"
|
#include "..\lua-engine.h"
|
||||||
|
|
||||||
#define MAX_RECENT_SCRIPTS 15
|
#define MAX_RECENT_SCRIPTS 15
|
||||||
|
char Recent_Scripts[MAX_RECENT_SCRIPTS][1024] = {0};
|
||||||
|
|
||||||
static char Str_Tmp [1024]; // shadow added because the global one is completely unreliable
|
static char Str_Tmp [1024];
|
||||||
|
|
||||||
char Recent_Scripts[MAX_RECENT_SCRIPTS][1024];
|
|
||||||
|
|
||||||
struct ControlLayoutInfo
|
struct ControlLayoutInfo
|
||||||
{
|
{
|
||||||
|
@ -141,7 +140,7 @@ void KillWatcherThread (HWND hDlg)
|
||||||
|
|
||||||
|
|
||||||
// some extensions that might commonly be near lua files that almost certainly aren't lua files.
|
// some extensions that might commonly be near lua files that almost certainly aren't lua files.
|
||||||
static const char* s_nonLuaExtensions [] = {"txt", "nfo", "htm", "html", "jpg", "jpeg", "png", "bmp", "gif", "mp3", "wav", "lnk", "exe", "bat", "gmv", "gm2", "luasav", "sav", "srm", "brm", "cfg", "wch", "gs*", "bin","smd","gen","32x","cue","iso","raw"};
|
static const char* s_nonLuaExtensions [] = {"txt", "nfo", "htm", "html", "jpg", "jpeg", "png", "bmp", "gif", "mp3", "wav", "lnk", "exe", "bat", "luasav", "sav", "srm", "brm", "cfg", "wch", "ds*", "nds","bin","raw"};
|
||||||
|
|
||||||
|
|
||||||
void Update_Recent_Script(const char* Path, bool dontPutAtTop)
|
void Update_Recent_Script(const char* Path, bool dontPutAtTop)
|
||||||
|
|
|
@ -222,6 +222,9 @@ static bool FrameLimit = true;
|
||||||
std::vector<HWND> LuaScriptHWnds;
|
std::vector<HWND> LuaScriptHWnds;
|
||||||
LRESULT CALLBACK LuaScriptProc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK LuaScriptProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
|
#define MAX_RECENT_SCRIPTS 15 // must match value in luaconsole.cpp (belongs in a header, but I didn't want to create one just for this)
|
||||||
|
extern char Recent_Scripts[MAX_RECENT_SCRIPTS][1024];
|
||||||
|
|
||||||
//=========================== view tools
|
//=========================== view tools
|
||||||
TOOLSCLASS *ViewDisasm_ARM7 = NULL;
|
TOOLSCLASS *ViewDisasm_ARM7 = NULL;
|
||||||
TOOLSCLASS *ViewDisasm_ARM9 = NULL;
|
TOOLSCLASS *ViewDisasm_ARM9 = NULL;
|
||||||
|
@ -704,6 +707,82 @@ void ClearRecentRoms()
|
||||||
UpdateRecentRomsMenu();
|
UpdateRecentRomsMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HMENU GetMenuItemParent(UINT itemId, HMENU hMenu = mainMenu)
|
||||||
|
{
|
||||||
|
MENUITEMINFO moo = {sizeof(MENUITEMINFO)};
|
||||||
|
if(!GetMenuItemInfo(hMenu, itemId, FALSE, &moo))
|
||||||
|
return NULL;
|
||||||
|
int nItems = GetMenuItemCount(hMenu);
|
||||||
|
for(int i = 0; i < nItems; i++)
|
||||||
|
{
|
||||||
|
MENUITEMINFO mii = {sizeof(MENUITEMINFO), MIIM_SUBMENU | MIIM_ID};
|
||||||
|
GetMenuItemInfo(hMenu, i, TRUE, &mii);
|
||||||
|
if(mii.wID == itemId)
|
||||||
|
return hMenu;
|
||||||
|
if(mii.hSubMenu)
|
||||||
|
if(HMENU innerResult = GetMenuItemParent(itemId, mii.hSubMenu))
|
||||||
|
return innerResult;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PopulateLuaSubmenu()
|
||||||
|
{
|
||||||
|
static HMENU luasubmenu = GetMenuItemParent(IDC_NEW_LUA_SCRIPT);
|
||||||
|
static int luasubmenuOriginalSize = GetMenuItemCount(luasubmenu);
|
||||||
|
|
||||||
|
// delete any previously-dynamically-added menu items
|
||||||
|
int i = luasubmenuOriginalSize;
|
||||||
|
while(GetMenuItemCount(luasubmenu) > i)
|
||||||
|
DeleteMenu(luasubmenu, i, MF_BYPOSITION);
|
||||||
|
|
||||||
|
// add menu items for currently-open scripts
|
||||||
|
char Str_Tmp [1024];
|
||||||
|
int Flags = MF_BYPOSITION | MF_STRING;
|
||||||
|
if(!LuaScriptHWnds.empty())
|
||||||
|
{
|
||||||
|
InsertMenu(luasubmenu, i++, MF_SEPARATOR, NULL, NULL);
|
||||||
|
for(unsigned int j = 0; j < LuaScriptHWnds.size(); j++)
|
||||||
|
{
|
||||||
|
GetWindowText(LuaScriptHWnds[j], Str_Tmp, 1024);
|
||||||
|
InsertMenu(luasubmenu, i++, MF_BYPOSITION | MF_STRING, IDC_LUASCRIPT_RESERVE_START+j, Str_Tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add menu items for recently-opened-but-not-currently-open scripts
|
||||||
|
int dividerI = i;
|
||||||
|
for(unsigned int j = 0; j < MAX_RECENT_SCRIPTS; j++)
|
||||||
|
{
|
||||||
|
const char* pathPtr = Recent_Scripts[j];
|
||||||
|
if(!*pathPtr)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
HWND IsScriptFileOpen(const char* Path);
|
||||||
|
if(IsScriptFileOpen(pathPtr))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// only show some of the path
|
||||||
|
const char* pathPtrSearch;
|
||||||
|
int slashesLeft = 2;
|
||||||
|
for(pathPtrSearch = pathPtr + strlen(pathPtr) - 1;
|
||||||
|
pathPtrSearch != pathPtr && slashesLeft >= 0;
|
||||||
|
pathPtrSearch--)
|
||||||
|
{
|
||||||
|
char c = *pathPtrSearch;
|
||||||
|
if(c == '\\' || c == '/')
|
||||||
|
slashesLeft--;
|
||||||
|
}
|
||||||
|
if(slashesLeft < 0)
|
||||||
|
pathPtr = pathPtrSearch + 2;
|
||||||
|
strcpy(Str_Tmp, pathPtr);
|
||||||
|
|
||||||
|
if(i == dividerI)
|
||||||
|
InsertMenu(luasubmenu, i++, MF_SEPARATOR, NULL, NULL);
|
||||||
|
|
||||||
|
InsertMenu(luasubmenu, i++, MF_BYPOSITION | MF_STRING, IDD_LUARECENT_RESERVE_START+j, Str_Tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int CreateDDrawBuffers()
|
int CreateDDrawBuffers()
|
||||||
|
@ -1869,6 +1948,15 @@ int _main()
|
||||||
GetPrivateProfileString("Watches", str, "", &rw_recent_files[i][0], 1024, IniName);
|
GetPrivateProfileString("Watches", str, "", &rw_recent_files[i][0], 1024, IniName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(int i = 0; i < MAX_RECENT_SCRIPTS; i++)
|
||||||
|
{
|
||||||
|
char str[256];
|
||||||
|
sprintf(str, "Recent Lua Script %d", i+1);
|
||||||
|
GetPrivateProfileString("Scripting", str, "", &Recent_Scripts[i][0], 1024, IniName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//i think we should override the ini file with anything from the commandline
|
//i think we should override the ini file with anything from the commandline
|
||||||
CommandLine cmdline;
|
CommandLine cmdline;
|
||||||
cmdline.loadCommonOptions();
|
cmdline.loadCommonOptions();
|
||||||
|
@ -3027,6 +3115,8 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
MainWindow->checkMenu(savelist[i], false);
|
MainWindow->checkMenu(savelist[i], false);
|
||||||
MainWindow->checkMenu(savelist[CommonSettings.manualBackupType], true);
|
MainWindow->checkMenu(savelist[CommonSettings.manualBackupType], true);
|
||||||
|
|
||||||
|
// recent/active scripts menu
|
||||||
|
PopulateLuaSubmenu();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3083,6 +3173,15 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
WritePrivateProfileString("Watches", str, &rw_recent_files[i][0], IniName);
|
WritePrivateProfileString("Watches", str, &rw_recent_files[i][0], IniName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(int i = 0; i < MAX_RECENT_SCRIPTS; i++)
|
||||||
|
{
|
||||||
|
char str[256];
|
||||||
|
sprintf(str, "Recent Lua Script %d", i+1);
|
||||||
|
WritePrivateProfileString("Scripting", str, &Recent_Scripts[i][0], IniName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ExitRunLoop();
|
ExitRunLoop();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3390,6 +3489,31 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
ClearRecentRoms();
|
ClearRecentRoms();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(wParam >= IDD_LUARECENT_RESERVE_START &&
|
||||||
|
wParam <= IDD_LUARECENT_RESERVE_END &&
|
||||||
|
wParam - IDD_LUARECENT_RESERVE_START < MAX_RECENT_SCRIPTS)
|
||||||
|
{
|
||||||
|
if(LuaScriptHWnds.size() < 16)
|
||||||
|
{
|
||||||
|
char temp [1024];
|
||||||
|
strcpy(temp, Recent_Scripts[wParam - IDD_LUARECENT_RESERVE_START]);
|
||||||
|
HWND IsScriptFileOpen(const char* Path);
|
||||||
|
if(!IsScriptFileOpen(temp))
|
||||||
|
{
|
||||||
|
HWND hDlg = CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_LUA), MainWindow->getHWnd(), (DLGPROC) LuaScriptProc);
|
||||||
|
SendDlgItemMessage(hDlg,IDC_EDIT_LUAPATH,WM_SETTEXT,0,(LPARAM)temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(wParam >= IDC_LUASCRIPT_RESERVE_START &&
|
||||||
|
wParam <= IDC_LUASCRIPT_RESERVE_END)
|
||||||
|
{
|
||||||
|
unsigned int index = wParam - IDC_LUASCRIPT_RESERVE_START;
|
||||||
|
if(LuaScriptHWnds.size() > index)
|
||||||
|
SetForegroundWindow(LuaScriptHWnds[index]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
switch(LOWORD(wParam))
|
switch(LOWORD(wParam))
|
||||||
{
|
{
|
||||||
|
@ -4007,10 +4131,11 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
return 0;
|
return 0;
|
||||||
case IDC_NEW_LUA_SCRIPT:
|
case IDC_NEW_LUA_SCRIPT:
|
||||||
if(LuaScriptHWnds.size() < 16)
|
if(LuaScriptHWnds.size() < 16)
|
||||||
{
|
|
||||||
CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_LUA), MainWindow->getHWnd(), (DLGPROC) LuaScriptProc);
|
CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_LUA), MainWindow->getHWnd(), (DLGPROC) LuaScriptProc);
|
||||||
// DialogsOpen++;
|
break;
|
||||||
}
|
case IDC_CLOSE_LUA_SCRIPTS:
|
||||||
|
for(int i=(int)LuaScriptHWnds.size()-1; i>=0; i--)
|
||||||
|
SendMessage(LuaScriptHWnds[i], WM_CLOSE, 0,0);
|
||||||
break;
|
break;
|
||||||
case IDC_LANGENGLISH:
|
case IDC_LANGENGLISH:
|
||||||
SaveLanguage(0);
|
SaveLanguage(0);
|
||||||
|
@ -4974,7 +5099,6 @@ const char* OpenLuaScript(const char* filename, const char* extraDirToCheck, boo
|
||||||
HWND hDlg = CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_LUA), MainWindow->getHWnd(), (DLGPROC) LuaScriptProc);
|
HWND hDlg = CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_LUA), MainWindow->getHWnd(), (DLGPROC) LuaScriptProc);
|
||||||
SendMessage(hDlg,WM_COMMAND,IDC_NOTIFY_SUBSERVIENT,TRUE);
|
SendMessage(hDlg,WM_COMMAND,IDC_NOTIFY_SUBSERVIENT,TRUE);
|
||||||
SendDlgItemMessage(hDlg,IDC_EDIT_LUAPATH,WM_SETTEXT,0,(LPARAM)filename);
|
SendDlgItemMessage(hDlg,IDC_EDIT_LUAPATH,WM_SETTEXT,0,(LPARAM)filename);
|
||||||
// DialogsOpen++;
|
|
||||||
|
|
||||||
SetActiveWindow(prevWindow);
|
SetActiveWindow(prevWindow);
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,6 +138,7 @@
|
||||||
#define IDC_BROWSELUA 365
|
#define IDC_BROWSELUA 365
|
||||||
#define IDD_PATHSETTINGS 366
|
#define IDD_PATHSETTINGS 366
|
||||||
#define IDC_STATEREWINDING 367
|
#define IDC_STATEREWINDING 367
|
||||||
|
#define IDC_CLOSE_LUA_SCRIPTS 368
|
||||||
#define IDC_DES_BOX 402
|
#define IDC_DES_BOX 402
|
||||||
#define IDC_R0 403
|
#define IDC_R0 403
|
||||||
#define IDC_R1 404
|
#define IDC_R1 404
|
||||||
|
@ -760,6 +761,10 @@
|
||||||
#define IDC_LABEL_BLUE 50036
|
#define IDC_LABEL_BLUE 50036
|
||||||
#define IDC_LID 50037
|
#define IDC_LID 50037
|
||||||
#define IDD_INPUTCONFIG 50038
|
#define IDD_INPUTCONFIG 50038
|
||||||
|
#define IDC_LUASCRIPT_RESERVE_START 58000
|
||||||
|
#define IDC_LUASCRIPT_RESERVE_END 58099
|
||||||
|
#define IDD_LUARECENT_RESERVE_START 58100
|
||||||
|
#define IDD_LUARECENT_RESERVE_END 58199
|
||||||
#define IDC_LABEL_HK1 60001
|
#define IDC_LABEL_HK1 60001
|
||||||
#define IDC_LABEL_HK2 60002
|
#define IDC_LABEL_HK2 60002
|
||||||
#define IDC_LABEL_HK3 60003
|
#define IDC_LABEL_HK3 60003
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue