Win32 - Recent Movie Menu added

This commit is contained in:
adelikat 2009-05-25 15:42:24 +00:00
parent a15469f103
commit c771ac2d6d
7 changed files with 163 additions and 10 deletions

View File

@ -1,3 +1,4 @@
23-may-2009 - adelikat - win32 - Recent Movie Menu added
22-may-2009 - adelikat - win32 - "Disable screen saver" gui option now also diables the monitor powersave
22-may-2009 - adelikat - win32 - Debugger - Step type functions now update other dialogs such as ppu, nametable, code/data, trace logger, etc.
22-may-2009 - adelikat - win32 - Hex Editor - Save Rom As... menu option enabled and implemented

View File

@ -113,6 +113,12 @@ static CFGSTRUCT fceuconfig[] = {
ACS(recent_lua[3]),
ACS(recent_lua[4]),
ACS(recent_movie[0]),
ACS(recent_movie[1]),
ACS(recent_movie[2]),
ACS(recent_movie[3]),
ACS(recent_movie[4]),
AC(gNoBGFillColor),
AC(ntsccol),AC(ntsctint),AC(ntschue),

View File

@ -56,6 +56,7 @@ BEGIN
END
POPUP "&Movie"
BEGIN
MENUITEM "Recent", MENU_MOVIE_RECENT
MENUITEM "&Record Movie...", MENU_RECORD_MOVIE
MENUITEM "&Play Movie...", MENU_REPLAY_MOVIE
MENUITEM "&Stop Movie", MENU_STOP_MOVIE

View File

@ -5,7 +5,6 @@
#define CLOSE_BUTTON 1
#define BUTTON_CLOSE 1
#define BTN_CLOSE 1
#define BTN_CANCEL 800
#define MENU_OPEN_FILE 100
#define EDIT_ROMS 100
#define LBL_LOG_TEXT 100
@ -202,7 +201,6 @@
#define IDC_DEBUGGER_ENABLE_SYMBOLIC 208
#define BTN_NETMOO_CONNECT 250
#define MENU_HIDE_MENU 300
//#define CHECK_SCREENSHOT_NAMES 300
#define COMBO_FILTER 300
#define IDC_EDIT_AUTHORINFO 300
#define IDC_LABEL_LENGTH 300
@ -286,6 +284,7 @@
#define IDC_VIDEOCONFIG_NO8LIM 600
#define IDC_DEBUGGER_ROM_PATCHER 602
#define LIST_DEBUGGER_BOOKMARKS 701
#define BTN_CANCEL 800
#define IDC_EDIT_OFFSET 1000
#define IDC_GAME_GENIE_CODE 1000
#define IDC_MEMVIEWFIND_WHAT 1000
@ -681,6 +680,8 @@
#define MENU_VIEWSAVESLOTS 40350
#define ID_LUA_RECENT 40351
#define MENU_LUA_RECENT 40352
#define ID_Menu40353 40353
#define MENU_MOVIE_RECENT 40354
#define IDC_DEBUGGER_ICONTRAY 55535
#define MW_ValueLabel2 65423
#define MW_ValueLabel1 65426
@ -690,7 +691,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 125
#define _APS_NEXT_COMMAND_VALUE 40353
#define _APS_NEXT_COMMAND_VALUE 40355
#define _APS_NEXT_CONTROL_VALUE 1204
#define _APS_NEXT_SYMED_VALUE 101
#endif

View File

@ -79,12 +79,13 @@ using namespace std;
//********************************************************************************
//Handles----------------------------------------------
static HMENU fceumenu = 0; //Main menu.
HWND pwindow; //Client Area
static HMENU recentmenu; //Recent Menu
static HMENU recentluamenu; //Recent Lua Files Menu
HMENU hfceuxcontext; //Handle to context menu
HMENU hfceuxcontextsub; //Handle to context sub menu
static HMENU fceumenu = 0; //Main menu.
HWND pwindow; //Client Area
static HMENU recentmenu; //Recent Menu
static HMENU recentluamenu; //Recent Lua Files Menu
static HMENU recentmoviemenu; //Recent Movie Files Menu
HMENU hfceuxcontext; //Handle to context menu
HMENU hfceuxcontextsub; //Handle to context sub menu
//Extern variables-------------------------------------
extern bool movieSubtitles;
@ -134,11 +135,16 @@ char *recent_files[] = { 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 };
const unsigned int MENU_FIRST_RECENT_FILE = 600;
const unsigned int MAX_NUMBER_OF_RECENT_FILES = sizeof(recent_files)/sizeof(*recent_files);
//Lua Recent Menu ---------------------------------------
//Recent Lua Menu ----------------------------------------
char *recent_lua[] = {0,0,0,0,0};
const unsigned int LUA_FIRST_RECENT_FILE = 50000;
const unsigned int MAX_NUMBER_OF_LUA_RECENT_FILES = sizeof(recent_lua)/sizeof(*recent_lua);
//Recent Movie Menu -------------------------------------
char *recent_movie[] = {0,0,0,0,0};
const unsigned int MOVIE_FIRST_RECENT_FILE = 51000;
const unsigned int MAX_NUMBER_OF_MOVIE_RECENT_FILES = sizeof(recent_movie)/sizeof(*recent_movie);
//Exported variables ------------------------------------
int EnableBackgroundInput = 0;
@ -745,6 +751,123 @@ void AddRecentLuaFile(const char *filename)
UpdateRecentLuaArray(filename, recent_lua, MAX_NUMBER_OF_LUA_RECENT_FILES, recentluamenu, MENU_LUA_RECENT, LUA_FIRST_RECENT_FILE);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void UpdateMovieRMenu(HMENU menu, char **strs, unsigned int mitem, unsigned int baseid)
{
MENUITEMINFO moo;
int x;
moo.cbSize = sizeof(moo);
moo.fMask = MIIM_SUBMENU | MIIM_STATE;
GetMenuItemInfo(GetSubMenu(fceumenu, 0), mitem, FALSE, &moo);
moo.hSubMenu = menu;
moo.fState = strs[0] ? MFS_ENABLED : MFS_GRAYED;
SetMenuItemInfo(GetSubMenu(fceumenu, 0), mitem, FALSE, &moo);
// Remove all recent files submenus
for(x = 0; x < MAX_NUMBER_OF_MOVIE_RECENT_FILES; x++)
{
RemoveMenu(menu, baseid + x, MF_BYCOMMAND);
}
// Recreate the menus
for(x = MAX_NUMBER_OF_MOVIE_RECENT_FILES - 1; x >= 0; x--)
{
// Skip empty strings
if(!strs[x])
continue;
string tmp = strs[x];
//clamp this string to 128 chars
if(tmp.size()>128)
tmp = tmp.substr(0,128);
moo.cbSize = sizeof(moo);
moo.fMask = MIIM_DATA | MIIM_ID | MIIM_TYPE;
// Insert the menu item
moo.cch = tmp.size();
moo.fType = 0;
moo.wID = baseid + x;
moo.dwTypeData = (LPSTR)tmp.c_str();
InsertMenuItem(menu, 0, 1, &moo);
}
DrawMenuBar(hAppWnd);
}
void UpdateRecentMovieArray(const char* addString, char** bufferArray, unsigned int arrayLen, HMENU menu, unsigned int menuItem, unsigned int baseId)
{
// Try to find out if the filename is already in the recent files list.
for(unsigned int x = 0; x < arrayLen; x++)
{
if(bufferArray[x])
{
if(!strcmp(bufferArray[x], addString)) // Item is already in list.
{
// If the filename is in the file list don't add it again.
// Move it up in the list instead.
int y;
char *tmp;
// Save pointer.
tmp = bufferArray[x];
for(y = x; y; y--)
{
// Move items down.
bufferArray[y] = bufferArray[y - 1];
}
// Put item on top.
bufferArray[0] = tmp;
// Update the recent files menu
UpdateMovieRMenu(menu, bufferArray, menuItem, baseId);
return;
}
}
}
// The filename wasn't found in the list. That means we need to add it.
// If there's no space left in the recent files list, get rid of the last
// item in the list.
if(bufferArray[arrayLen - 1])
{
free(bufferArray[arrayLen - 1]);
}
// Move the other items down.
for(unsigned int x = arrayLen - 1; x; x--)
{
bufferArray[x] = bufferArray[x - 1];
}
// Add the new item.
bufferArray[0] = (char*)malloc(strlen(addString) + 1); //mbg merge 7/17/06 added cast
strcpy(bufferArray[0], addString);
// Update the recent files menu
UpdateMovieRMenu(menu, bufferArray, menuItem, baseId);
}
void AddRecentMovieFile(const char *filename)
{
UpdateRecentMovieArray(filename, recent_movie, MAX_NUMBER_OF_MOVIE_RECENT_FILES, recentmoviemenu, MENU_MOVIE_RECENT, MOVIE_FIRST_RECENT_FILE);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Hides the main menu.
//@param hide_menu Flag to turn the main menu on (0) or off (1)
void HideMenu(unsigned int hide_menu)
@ -1137,6 +1260,17 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
FCEU_LoadLuaCode(fname);
}
}
// A menu item for the recent movie files menu was clicked.
if(wParam >= MOVIE_FIRST_RECENT_FILE && wParam <= MOVIE_FIRST_RECENT_FILE + MAX_NUMBER_OF_MOVIE_RECENT_FILES - 1)
{
char*& fname = recent_movie[wParam - MOVIE_FIRST_RECENT_FILE];
if(fname)
{
FCEUI_LoadMovie(fname, 1, false, false);
}
}
switch(LOWORD(wParam))
{
//File Menu-------------------------------------------------------------
@ -1681,6 +1815,7 @@ adelikat: Outsourced this to a remappable hotkey
EnableMenuItem(fceumenu,MENU_OPEN_FILE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_OPENGAME)?MF_ENABLED:MF_GRAYED));
EnableMenuItem(fceumenu,MENU_RECORD_MOVIE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_RECORDMOVIE)?MF_ENABLED:MF_GRAYED));
EnableMenuItem(fceumenu,MENU_REPLAY_MOVIE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_PLAYMOVIE)?MF_ENABLED:MF_GRAYED));
EnableMenuItem(fceumenu,MENU_MOVIE_RECENT,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_PLAYMOVIE)?MF_ENABLED:MF_GRAYED));
EnableMenuItem(fceumenu,MENU_STOP_MOVIE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_STOPMOVIE)?MF_ENABLED:MF_GRAYED));
EnableMenuItem(fceumenu,ID_FILE_PLAYMOVIEFROMBEGINNING,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_PLAYFROMBEGINNING)?MF_ENABLED:MF_GRAYED));
EnableMenuItem(fceumenu,MENU_SAVESTATE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_QUICKSAVE)?MF_ENABLED:MF_GRAYED));
@ -1836,10 +1971,12 @@ int CreateMainWindow()
recentmenu = CreateMenu();
recentluamenu = CreateMenu();
recentmoviemenu = CreateMenu();
// Update recent files menu
UpdateRMenu(recentmenu, recent_files, MENU_RECENT_FILES, MENU_FIRST_RECENT_FILE);
UpdateLuaRMenu(recentluamenu, recent_lua, MENU_LUA_RECENT, LUA_FIRST_RECENT_FILE);
UpdateMovieRMenu(recentmoviemenu, recent_movie, MENU_MOVIE_RECENT, MOVIE_FIRST_RECENT_FILE);
updateGameDependentMenus(0);
if (MainWindow_wndx==-32000) MainWindow_wndx=0; //Just in case

View File

@ -18,6 +18,7 @@ struct CreateMovieParameters
extern char *recent_files[];
extern char *recent_lua[];
extern char *recent_movie[];
extern HWND pwindow;
void HideFWindow(int h);

View File

@ -34,6 +34,7 @@
#ifdef WIN32
#include <windows.h>
extern void AddRecentMovieFile(const char *filename);
#endif
using namespace std;
@ -749,6 +750,11 @@ void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _paus
return;
}
#ifdef WIN32
//Add to the recent movie menu
AddRecentMovieFile(fname);
#endif
LoadFM2(currMovieData, fp->stream, INT_MAX, false);
LoadSubtitles(currMovieData);
delete fp;