diff options
Diffstat (limited to 'docs/release/src/osd/winui/winui.cpp')
-rw-r--r-- | docs/release/src/osd/winui/winui.cpp | 1461 |
1 files changed, 721 insertions, 740 deletions
diff --git a/docs/release/src/osd/winui/winui.cpp b/docs/release/src/osd/winui/winui.cpp index 914fd9618a6..2117d5eb46a 100644 --- a/docs/release/src/osd/winui/winui.cpp +++ b/docs/release/src/osd/winui/winui.cpp @@ -3,7 +3,7 @@ /*************************************************************************** - winui.c + winui.cpp Win32 GUI code. @@ -34,6 +34,8 @@ #include <time.h> #include <tchar.h> +/* Uncomment to add Direct Draw support (has to be added back to the core too) */ +//#define UI_DIRECTDRAW // MAME/MAMEUI headers #include "emu.h" @@ -66,7 +68,9 @@ #include "help.h" #include "history.h" #include "dialogs.h" +#ifdef UI_DIRECTDRAW #include "directdraw.h" +#endif #include "directinput.h" #include "dijoystick.h" /* For DIJoystick availability. */ @@ -74,10 +78,6 @@ #define snprintf _snprintf #endif -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wunused-but-set-variable" -#endif - #ifndef LVS_EX_LABELTIP #define LVS_EX_LABELTIP 0x00004000 // listview unfolds partly hidden labels if it does not have infotip text #endif // LVS_EX_LABELTIP @@ -233,12 +233,12 @@ UINT8 playopts_apply = 0; typedef struct _play_options play_options; struct _play_options { - const char *record; // OPTION_RECORD - const char *playback; // OPTION_PLAYBACK - const char *state; // OPTION_STATE - const char *wavwrite; // OPTION_WAVWRITE - const char *mngwrite; // OPTION_MNGWRITE - const char *aviwrite; // OPTION_AVIWRITE + const char *record; // OPTION_RECORD + const char *playback; // OPTION_PLAYBACK + const char *state; // OPTION_STATE + const char *wavwrite; // OPTION_WAVWRITE + const char *mngwrite; // OPTION_MNGWRITE + const char *aviwrite; // OPTION_AVIWRITE }; /*************************************************************************** @@ -406,7 +406,7 @@ typedef struct int id; /* Window control id */ HWND hwnd; /* Window handle */ } u; - BOOL setfont; /* Do we set this item's font? */ + BOOL setfont; /* Do we set this item's font? */ int action; /* What to do when control is resized */ void *subwindow; /* Points to a Resize structure for this subwindow; NULL if none */ } ResizeItem; @@ -475,18 +475,17 @@ static object_pool *mameui_pool; static int game_index; static int progBarStep; -static BOOL bDoGameCheck = FALSE; +static BOOL bDoGameCheck = false; /* Tree control variables */ -static BOOL bShowTree = 1; static BOOL bShowToolBar = 1; static BOOL bShowStatusBar = 1; static BOOL bShowTabCtrl = 1; -static BOOL bProgressShown = FALSE; -static BOOL bListReady = FALSE; +static BOOL bProgressShown = false; +static BOOL bListReady = false; -#define WM_MAME32_FILECHANGED (WM_USER + 0) -#define WM_MAME32_AUDITGAME (WM_USER + 1) +#define WM_MAME32_FILECHANGED (WM_USER + 0) +#define WM_MAME32_AUDITGAME (WM_USER + 1) static PDIRWATCHER s_pWatcher; @@ -500,10 +499,10 @@ static bool keyboard_state[4096]; /* __code_max #defines the number of internal static char g_SearchText[256]; /* table copied from windows/inputs.c */ // table entry indices -#define MAME_KEY 0 -#define DI_KEY 1 -#define VIRTUAL_KEY 2 -#define ASCII_KEY 3 +#define MAME_KEY 0 +#define DI_KEY 1 +#define VIRTUAL_KEY 2 +#define ASCII_KEY 3 // master keyboard translation table static const int win_key_trans_table[][4] = @@ -660,7 +659,7 @@ static const GUISequence GUISequenceControl[]= {"gui_key_view_tab_marquee", input_seq(), ID_VIEW_TAB_MARQUEE, Get_ui_key_view_tab_marquee }, {"gui_key_view_tab_screenshot", input_seq(), ID_VIEW_TAB_SCREENSHOT, Get_ui_key_view_tab_screenshot }, {"gui_key_view_tab_title", input_seq(), ID_VIEW_TAB_TITLE, Get_ui_key_view_tab_title }, - {"gui_key_view_tab_pcb", input_seq(), ID_VIEW_TAB_PCB, Get_ui_key_view_tab_pcb }, + {"gui_key_view_tab_pcb", input_seq(), ID_VIEW_TAB_PCB, Get_ui_key_view_tab_pcb }, {"gui_key_quit", input_seq(), ID_FILE_EXIT, Get_ui_key_quit }, }; @@ -680,15 +679,15 @@ static HWND hStatusBar = 0; static HWND s_hToolBar = 0; /* Column Order as Displayed */ -static BOOL oldControl = FALSE; -static BOOL xpControl = FALSE; +static BOOL oldControl = false; +static BOOL xpControl = false; /* Used to recalculate the main window layout */ static int bottomMargin; static int topMargin; -static int have_history = FALSE; +static int have_history = false; -static BOOL have_selection = FALSE; +static BOOL have_selection = false; static HBITMAP hMissing_bitmap = NULL; @@ -753,8 +752,8 @@ static const int s_nPickers[] = /* How to resize toolbar sub window */ static ResizeItem toolbar_resize_items[] = { - { RA_ID, { ID_TOOLBAR_EDIT }, TRUE, RA_LEFT | RA_TOP, NULL }, - { RA_END, { 0 }, FALSE, 0, NULL } + { RA_ID, { ID_TOOLBAR_EDIT }, true, RA_LEFT | RA_TOP, NULL }, + { RA_END, { 0 }, false, 0, NULL } }; static Resize toolbar_resize = { {0, 0, 0, 0}, toolbar_resize_items }; @@ -762,18 +761,18 @@ static Resize toolbar_resize = { {0, 0, 0, 0}, toolbar_resize_items }; /* How to resize main window */ static ResizeItem main_resize_items[] = { - { RA_HWND, { 0 }, FALSE, RA_LEFT | RA_RIGHT | RA_TOP, &toolbar_resize }, - { RA_HWND, { 0 }, FALSE, RA_LEFT | RA_RIGHT | RA_BOTTOM, NULL }, - { RA_ID, { IDC_DIVIDER }, FALSE, RA_LEFT | RA_RIGHT | RA_TOP, NULL }, - { RA_ID, { IDC_TREE }, TRUE, RA_LEFT | RA_BOTTOM | RA_TOP, NULL }, - { RA_ID, { IDC_LIST }, TRUE, RA_ALL, NULL }, - { RA_ID, { IDC_SPLITTER }, FALSE, RA_LEFT | RA_BOTTOM | RA_TOP, NULL }, - { RA_ID, { IDC_SPLITTER2 },FALSE, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, - { RA_ID, { IDC_SSFRAME }, FALSE, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, - { RA_ID, { IDC_SSPICTURE },FALSE, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, - { RA_ID, { IDC_HISTORY }, TRUE, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, - { RA_ID, { IDC_SSTAB }, FALSE, RA_RIGHT | RA_TOP, NULL }, - { RA_END, { 0 }, FALSE, 0, NULL } + { RA_HWND, { 0 }, false, RA_LEFT | RA_RIGHT | RA_TOP, &toolbar_resize }, + { RA_HWND, { 0 }, false, RA_LEFT | RA_RIGHT | RA_BOTTOM, NULL }, + { RA_ID, { IDC_DIVIDER }, false, RA_LEFT | RA_RIGHT | RA_TOP, NULL }, + { RA_ID, { IDC_TREE }, true, RA_LEFT | RA_BOTTOM | RA_TOP, NULL }, + { RA_ID, { IDC_LIST }, true, RA_ALL, NULL }, + { RA_ID, { IDC_SPLITTER }, false, RA_LEFT | RA_BOTTOM | RA_TOP, NULL }, + { RA_ID, { IDC_SPLITTER2 },false, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, + { RA_ID, { IDC_SSFRAME }, false, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, + { RA_ID, { IDC_SSPICTURE },false, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, + { RA_ID, { IDC_HISTORY }, true, RA_RIGHT | RA_BOTTOM | RA_TOP, NULL }, + { RA_ID, { IDC_SSTAB }, false, RA_RIGHT | RA_TOP, NULL }, + { RA_END, { 0 }, false, 0, NULL } }; static Resize main_resize = { {0, 0, 0, 0}, main_resize_items }; @@ -785,12 +784,12 @@ TCHAR last_directory[MAX_PATH]; each time it changes */ static UINT g_mame32_message = 0; -static BOOL g_listview_dragging = FALSE; +static BOOL g_listview_dragging = false; static HIMAGELIST himl_drag; static int game_dragged; /* which game started the drag */ static HTREEITEM prev_drag_drop_target; /* which tree view item we're currently highlighting */ -static BOOL g_in_treeview_edit = FALSE; +static BOOL g_in_treeview_edit = false; /*************************************************************************** Global variables @@ -815,12 +814,8 @@ extern const LPCTSTR column_names[COLUMN_MAX] = TEXT("Play Time"), TEXT("Clone Of"), TEXT("Trackball"), -#ifdef SHOW_COLUMN_SAMPLES TEXT("Samples"), -#endif -#ifdef SHOW_COLUMN_ROMS TEXT("ROMs"), -#endif }; /*************************************************************************** @@ -847,6 +842,15 @@ class mameui_output_error : public osd_output public: virtual void output_callback(osd_output_channel channel, const char *msg, va_list args) { + if (channel == OSD_OUTPUT_CHANNEL_VERBOSE) + { + FILE *pFile; + pFile = fopen("verbose.log", "a"); + vfprintf(pFile, msg, args);fflush(pFile); + fclose (pFile); + return; + } + if (channel == OSD_OUTPUT_CHANNEL_ERROR) { char buffer[1024]; @@ -856,18 +860,38 @@ public: winwindow_toggle_full_screen(); vsnprintf(buffer, ARRAY_LENGTH(buffer), msg, args);printf("%s\n",buffer); - win_message_box_utf8(!osd_common_t::s_window_list.empty() ? std::static_pointer_cast<win_window_info>(osd_common_t::s_window_list.front())->platform_window() : hMain, buffer, MAMEUINAME, MB_ICONERROR | MB_OK); + win_message_box_utf8(!osd_common_t::s_window_list.empty() ? + std::static_pointer_cast<win_window_info>(osd_common_t::s_window_list.front())->platform_window() : hMain, buffer, MAMEUINAME, MB_ICONERROR | MB_OK); } - else - chain_output(channel, msg, args); +// else +// chain_output(channel, msg, args); // goes down the black hole + // LOG all messages + FILE *pFile; + pFile = fopen("winui.log", "a"); + vfprintf(pFile, msg, args);fflush(pFile); + fclose (pFile); +/* List of output types: + case OSD_OUTPUT_CHANNEL_ERROR: + case OSD_OUTPUT_CHANNEL_WARNING: + vfprintf(stderr, msg, args); // send errors and warnings to standard error (=console) + break; + case OSD_OUTPUT_CHANNEL_INFO: + case OSD_OUTPUT_CHANNEL_LOG: + vfprintf(stdout, msg, args); // send info and logging to standard output (=console) + break; + case OSD_OUTPUT_CHANNEL_VERBOSE: + if (verbose()) vfprintf(stdout, msg, args); // send verbose (2nd half) to console if enabled (first half lost) + break; + case OSD_OUTPUT_CHANNEL_DEBUG: // only for debug builds + vfprintf(stdout, msg, args); +*/ } }; -static std::wstring s2ws(const std::string& s) +static std::wstring s2ws(const string& s) { - int len; int slength = (int)s.length() + 1; - len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); + int len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); wchar_t* buf = new wchar_t[len]; MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len); std::wstring r(buf); @@ -884,9 +908,8 @@ static DWORD RunMAME(int nGameIndex, const play_options *playopts) time_t start, end; double elapsedtime; int i; - //mame_options mame_opts; seems useless.... + //mame_options mame_opts; //seems useless.... windows_options global_opts; - std::string error_string; // set up MAME options // mame_opts = mame_options_init(mame_win_options); @@ -894,29 +917,29 @@ static DWORD RunMAME(int nGameIndex, const play_options *playopts) SetDirectories(global_opts); // set some startup options - global_opts.set_value(OPTION_LANGUAGE, GetLanguageUI(), OPTION_PRIORITY_CMDLINE, error_string); - global_opts.set_value(OPTION_PLUGINS, GetEnablePlugins(), OPTION_PRIORITY_CMDLINE, error_string); - global_opts.set_value(OPTION_PLUGIN, GetPlugins(), OPTION_PRIORITY_CMDLINE, error_string); + global_opts.set_value(OPTION_LANGUAGE, GetLanguageUI(), OPTION_PRIORITY_CMDLINE); + global_opts.set_value(OPTION_PLUGINS, GetEnablePlugins(), OPTION_PRIORITY_CMDLINE); + global_opts.set_value(OPTION_PLUGIN, GetPlugins(), OPTION_PRIORITY_CMDLINE); // add image specific device options //mame_opts.set_system_name(global_opts, driver_list::driver(nGameIndex).name); - global_opts.set_value(OPTION_SYSTEMNAME, driver_list::driver(nGameIndex).name, OPTION_PRIORITY_CMDLINE, error_string); + global_opts.set_value(OPTION_SYSTEMNAME, driver_list::driver(nGameIndex).name, OPTION_PRIORITY_CMDLINE); // set any specified play options if (playopts_apply == 0x57) { if (playopts->record) - global_opts.set_value(OPTION_RECORD, playopts->record, OPTION_PRIORITY_CMDLINE,error_string); + global_opts.set_value(OPTION_RECORD, playopts->record, OPTION_PRIORITY_CMDLINE); if (playopts->playback) - global_opts.set_value(OPTION_PLAYBACK, playopts->playback, OPTION_PRIORITY_CMDLINE,error_string); + global_opts.set_value(OPTION_PLAYBACK, playopts->playback, OPTION_PRIORITY_CMDLINE); if (playopts->state) - global_opts.set_value(OPTION_STATE, playopts->state, OPTION_PRIORITY_CMDLINE,error_string); + global_opts.set_value(OPTION_STATE, playopts->state, OPTION_PRIORITY_CMDLINE); if (playopts->wavwrite) - global_opts.set_value(OPTION_WAVWRITE, playopts->wavwrite, OPTION_PRIORITY_CMDLINE,error_string); + global_opts.set_value(OPTION_WAVWRITE, playopts->wavwrite, OPTION_PRIORITY_CMDLINE); if (playopts->mngwrite) - global_opts.set_value(OPTION_MNGWRITE, playopts->mngwrite, OPTION_PRIORITY_CMDLINE,error_string); + global_opts.set_value(OPTION_MNGWRITE, playopts->mngwrite, OPTION_PRIORITY_CMDLINE); if (playopts->aviwrite) - global_opts.set_value(OPTION_AVIWRITE, playopts->aviwrite, OPTION_PRIORITY_CMDLINE,error_string); + global_opts.set_value(OPTION_AVIWRITE, playopts->aviwrite, OPTION_PRIORITY_CMDLINE); } // Mame will parse all the needed .ini files. @@ -953,19 +976,19 @@ static DWORD RunMAME(int nGameIndex, const play_options *playopts) if (playopts_apply == 0x57) { windows_options o; - load_options(o, OPTIONS_GAME, nGameIndex); + load_options(o, OPTIONS_GAME, nGameIndex, 0); if (playopts->record) - o.set_value(OPTION_RECORD, "", OPTION_PRIORITY_CMDLINE,error_string); + o.set_value(OPTION_RECORD, "", OPTION_PRIORITY_CMDLINE); if (playopts->playback) - o.set_value(OPTION_PLAYBACK, "", OPTION_PRIORITY_CMDLINE,error_string); + o.set_value(OPTION_PLAYBACK, "", OPTION_PRIORITY_CMDLINE); if (playopts->state) - o.set_value(OPTION_STATE, "", OPTION_PRIORITY_CMDLINE,error_string); + o.set_value(OPTION_STATE, "", OPTION_PRIORITY_CMDLINE); if (playopts->wavwrite) - o.set_value(OPTION_WAVWRITE, "", OPTION_PRIORITY_CMDLINE,error_string); + o.set_value(OPTION_WAVWRITE, "", OPTION_PRIORITY_CMDLINE); if (playopts->mngwrite) - o.set_value(OPTION_MNGWRITE, "", OPTION_PRIORITY_CMDLINE,error_string); + o.set_value(OPTION_MNGWRITE, "", OPTION_PRIORITY_CMDLINE); if (playopts->aviwrite) - o.set_value(OPTION_AVIWRITE, "", OPTION_PRIORITY_CMDLINE,error_string); + o.set_value(OPTION_AVIWRITE, "", OPTION_PRIORITY_CMDLINE); // apply the above to the ini file save_options(o, OPTIONS_GAME, nGameIndex); } @@ -982,18 +1005,15 @@ static DWORD RunMAME(int nGameIndex, const play_options *playopts) int MameUIMain(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) { + // delete old log file, ignore any error + unlink("verbose.log"); + unlink("winui.log"); + if (__argc != 1) { /* Rename main because gcc will use it instead of WinMain even with -mwindows */ - extern int utf8_main(std::vector<std::string> &args); - std::vector<std::string> utf8_argv(__argc); - - /* convert arguments to UTF-8 */ - for (int i = 0; i < __argc; i++) - utf8_argv[i] = ui_utf8_from_wstring(__targv[i]); - - /* run utf8_main */ - exit(utf8_main(utf8_argv)); + extern int main_(int argc, char *argv[]); + exit(main_(__argc, __argv)); } if (!Win32UI_init(hInstance, lpCmdLine, nCmdShow)) return 1; @@ -1024,22 +1044,17 @@ object_pool *GetMameUIMemoryPool(void) void GetRealColumnOrder(int order[]) { - int tmpOrder[COLUMN_MAX]; - int nColumnMax; - int i; - BOOL res; - - nColumnMax = Picker_GetNumColumns(hwndList); + int nColumnMax = Picker_GetNumColumns(hwndList); /* Get the Column Order and save it */ if (!oldControl) { - res = ListView_GetColumnOrderArray(hwndList, nColumnMax, tmpOrder); + int tmpOrder[COLUMN_MAX]; + BOOL res = ListView_GetColumnOrderArray(hwndList, nColumnMax, tmpOrder); + res++; - for (i = 0; i < nColumnMax; i++) - { + for (int i = 0; i < nColumnMax; i++) order[i] = Picker_GetRealColumnFromViewColumn(hwndList, tmpOrder[i]); - } } } @@ -1054,94 +1069,71 @@ void GetRealColumnOrder(int order[]) */ static HICON FormatICOInMemoryToHICON(PBYTE ptrBuffer, UINT nBufferSize) { - ICONIMAGE IconImage; - LPICONDIRENTRY lpIDE = NULL; - UINT nNumImages; - UINT nBufferIndex = 0; - HICON hIcon = NULL; - /* Is there a WORD? */ if (nBufferSize < sizeof(WORD)) - { return NULL; - } /* Was it 'reserved' ? (ie 0) */ + UINT nBufferIndex = 0; if ((WORD)(ptrBuffer[nBufferIndex]) != 0) - { return NULL; - } nBufferIndex += sizeof(WORD); /* Is there a WORD? */ if (nBufferSize - nBufferIndex < sizeof(WORD)) - { return NULL; - } /* Was it type 1? */ if ((WORD)(ptrBuffer[nBufferIndex]) != 1) - { return NULL; - } nBufferIndex += sizeof(WORD); /* Is there a WORD? */ if (nBufferSize - nBufferIndex < sizeof(WORD)) - { return NULL; - } /* Then that's the number of images in the ICO file */ - nNumImages = (WORD)(ptrBuffer[nBufferIndex]); + UINT nNumImages = (WORD)(ptrBuffer[nBufferIndex]); /* Is there at least one icon in the file? */ if ( nNumImages < 1 ) - { return NULL; - } nBufferIndex += sizeof(WORD); /* Is there enough space for the icon directory entries? */ if ((nBufferIndex + nNumImages * sizeof(ICONDIRENTRY)) > nBufferSize) - { return NULL; - } /* Assign icon directory entries from buffer */ - lpIDE = (LPICONDIRENTRY)(&ptrBuffer[nBufferIndex]); + LPICONDIRENTRY lpIDE = (LPICONDIRENTRY)(&ptrBuffer[nBufferIndex]); nBufferIndex += nNumImages * sizeof (ICONDIRENTRY); + ICONIMAGE IconImage; IconImage.dwNumBytes = lpIDE->dwBytesInRes; /* Seek to beginning of this image */ if ( lpIDE->dwImageOffset > nBufferSize ) - { return NULL; - } nBufferIndex = lpIDE->dwImageOffset; /* Read it in */ if ((nBufferIndex + lpIDE->dwBytesInRes) > nBufferSize) - { return NULL; - } IconImage.lpBits = &ptrBuffer[nBufferIndex]; nBufferIndex += lpIDE->dwBytesInRes; + /* It failed, odds are good we're on NT so try the non-Ex way */ + HICON hIcon = NULL; if (hIcon == NULL) - { /* We would break on NT if we try with a 16bpp image */ if (((LPBITMAPINFO)IconImage.lpBits)->bmiHeader.biBitCount != 16) - { - hIcon = CreateIconFromResourceEx(IconImage.lpBits, IconImage.dwNumBytes, TRUE, 0x00030000,0,0,LR_DEFAULTSIZE); - } - } + hIcon = CreateIconFromResourceEx(IconImage.lpBits, IconImage.dwNumBytes, true, 0x00030000,0,0,LR_DEFAULTSIZE); + return hIcon; } @@ -1151,71 +1143,57 @@ HICON LoadIconFromFile(const char *iconname) struct stat file_stat; char tmpStr[MAX_PATH]; char tmpIcoName[MAX_PATH]; - const char* sDirName = GetImgDir(); - PBYTE bufferPtr; - util::archive_file::error ziperr; + PBYTE bufferPtr = 0; util::archive_file::ptr zip; - int res = 0; - sprintf(tmpStr, "%s/%s.ico", GetIconsDir(), iconname); + const string t = GetIconsDir(); + sprintf(tmpStr, "%s/%s.ico", t.c_str(), iconname); if (stat(tmpStr, &file_stat) != 0 || (hIcon = win_extract_icon_utf8(hInst, tmpStr, 0)) == 0) { - sprintf(tmpStr, "%s/%s.ico", sDirName, iconname); - if (stat(tmpStr, &file_stat) != 0 - || (hIcon = win_extract_icon_utf8(hInst, tmpStr, 0)) == 0) + sprintf(tmpStr, "%s/icons.zip", t.c_str()); + sprintf(tmpIcoName, "%s.ico", iconname); + + if (util::archive_file::open_zip(tmpStr, zip) == util::archive_file::error::NONE) + { + if (zip->search(tmpIcoName, false) >= 0) + { + bufferPtr = (PBYTE)malloc(zip->current_uncompressed_length()); + if (bufferPtr) + { + if (zip->decompress(bufferPtr, zip->current_uncompressed_length()) == util::archive_file::error::NONE) + hIcon = FormatICOInMemoryToHICON(bufferPtr, zip->current_uncompressed_length()); + + free(bufferPtr); + } + } + zip.reset(); + } + else { - sprintf(tmpStr, "%s/icons.zip", GetIconsDir()); + sprintf(tmpStr, "%s/icons.7z", t.c_str()); sprintf(tmpIcoName, "%s.ico", iconname); - ziperr = util::archive_file::open_zip(tmpStr, zip); - if (ziperr == util::archive_file::error::NONE) + if (util::archive_file::open_7z(tmpStr, zip) == util::archive_file::error::NONE) { - res = zip->search(tmpIcoName, false); - if (res >= 0) + if (zip->search(tmpIcoName, false) >= 0) { bufferPtr = (PBYTE)malloc(zip->current_uncompressed_length()); if (bufferPtr) { - ziperr = zip->decompress(bufferPtr, zip->current_uncompressed_length()); - if (ziperr == util::archive_file::error::NONE) - { + if (zip->decompress(bufferPtr, zip->current_uncompressed_length()) == util::archive_file::error::NONE) hIcon = FormatICOInMemoryToHICON(bufferPtr, zip->current_uncompressed_length()); - } + free(bufferPtr); } } zip.reset(); } - else - { - sprintf(tmpStr, "%s/icons.7z", GetIconsDir()); - sprintf(tmpIcoName, "%s.ico", iconname); - - ziperr = util::archive_file::open_7z(tmpStr, zip); - if (ziperr == util::archive_file::error::NONE) - { - res = zip->search(tmpIcoName, false); - if (res >= 0) - { - bufferPtr = (PBYTE)malloc(zip->current_uncompressed_length()); - if (bufferPtr) - { - ziperr = zip->decompress(bufferPtr, zip->current_uncompressed_length()); - if (ziperr == util::archive_file::error::NONE) - { - hIcon = FormatICOInMemoryToHICON(bufferPtr, zip->current_uncompressed_length()); - } - free(bufferPtr); - } - } - zip.reset(); - } - } } } return hIcon; } + /* Return the number of folders with options */ void SetNumOptionFolders(int count) { @@ -1232,7 +1210,7 @@ const char * GetSearchText(void) /* Sets the treeview and listviews sizes in accordance with their visibility and the splitters */ static void ResizeTreeAndListViews(BOOL bResizeHidden) { - int i; + bool bShowPicture = BIT(GetWindowPanes(), 3); int nLastWidth = 0; int nLastWidth2 = 0; int nLeftWindowWidth = 0; @@ -1249,17 +1227,17 @@ static void ResizeTreeAndListViews(BOOL bResizeHidden) rect.top += topMargin; /* Tree control */ - ShowWindow(GetDlgItem(hMain, IDC_TREE), bShowTree ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(hMain, IDC_TREE), BIT(GetWindowPanes(), 0) ? SW_SHOW : SW_HIDE); - for (i = 0; g_splitterInfo[i].nSplitterWindow; i++) + for (int i = 0; g_splitterInfo[i].nSplitterWindow; i++) { - bVisible = GetWindowLong(GetDlgItem(hMain, g_splitterInfo[i].nLeftWindow), GWL_STYLE) & WS_VISIBLE ? TRUE : FALSE; + bVisible = GetWindowLong(GetDlgItem(hMain, g_splitterInfo[i].nLeftWindow), GWL_STYLE) & WS_VISIBLE ? true : false; if (bResizeHidden || bVisible) { nLeftWindowWidth = nSplitterOffset[i] - SPLITTER_WIDTH/2 - nLastWidth; /* special case for the rightmost pane when the screenshot is gone */ - if (!GetShowScreenShot() && !g_splitterInfo[i+1].nSplitterWindow) + if (!bShowPicture && !g_splitterInfo[i+1].nSplitterWindow) nLeftWindowWidth = rect.right - nLastWidth; /* woah? are we overlapping ourselves? */ @@ -1271,11 +1249,9 @@ static void ResizeTreeAndListViews(BOOL bResizeHidden) i--; } - MoveWindow(GetDlgItem(hMain, g_splitterInfo[i].nLeftWindow), nLastWidth, rect.top + 2, - nLeftWindowWidth, (rect.bottom - rect.top) - 4 , TRUE); + MoveWindow(GetDlgItem(hMain, g_splitterInfo[i].nLeftWindow), nLastWidth, rect.top + 2, nLeftWindowWidth, (rect.bottom - rect.top) - 4 , true); - MoveWindow(GetDlgItem(hMain, g_splitterInfo[i].nSplitterWindow), nSplitterOffset[i], rect.top + 2, - SPLITTER_WIDTH, (rect.bottom - rect.top) - 4, TRUE); + MoveWindow(GetDlgItem(hMain, g_splitterInfo[i].nSplitterWindow), nSplitterOffset[i], rect.top + 2, SPLITTER_WIDTH, (rect.bottom - rect.top) - 4, true); } if (bVisible) @@ -1289,15 +1265,15 @@ static void ResizeTreeAndListViews(BOOL bResizeHidden) /* Adjust the list view and screenshot button based on GetShowScreenShot() */ void UpdateScreenShot(void) { + /* first time through can't do this stuff */ + if (hwndList == NULL) + return; + RECT rect; //int nWidth; RECT fRect; POINT p = {0, 0}; - /* first time through can't do this stuff */ - if (hwndList == NULL) - return; - /* Size the List Control in the Picker */ GetClientRect(hMain, &rect); @@ -1306,39 +1282,24 @@ void UpdateScreenShot(void) if (bShowToolBar) rect.top += topMargin; - if (GetShowScreenShot()) - { - //nWidth = nSplitterOffset[GetSplitterCount() - 1]; - CheckMenuItem(GetMenu(hMain),ID_VIEW_PICTURE_AREA, MF_CHECKED); - ToolBar_CheckButton(s_hToolBar, ID_VIEW_PICTURE_AREA, MF_CHECKED); - } - else - { - //nWidth = rect.right; - CheckMenuItem(GetMenu(hMain),ID_VIEW_PICTURE_AREA, MF_UNCHECKED); - ToolBar_CheckButton(s_hToolBar, ID_VIEW_PICTURE_AREA, MF_UNCHECKED); - } + BOOL bShowImage = BIT(GetWindowPanes(), 3); // ss + CheckMenuItem(GetMenu(hMain), ID_VIEW_PICTURE_AREA, bShowImage ? MF_CHECKED : MF_UNCHECKED); + ToolBar_CheckButton(s_hToolBar, ID_VIEW_PICTURE_AREA, bShowImage ? MF_CHECKED : MF_UNCHECKED); - ResizeTreeAndListViews(FALSE); + ResizeTreeAndListViews(false); FreeScreenShot(); if (have_selection) - { -#ifdef MESS - if (!g_szSelectedItem[0] || !LoadScreenShotEx(Picker_GetSelectedItem(hwndList), g_szSelectedItem, - TabView_GetCurrentTab(hTabCtrl))) -#endif // load and set image, or empty it if we don't have one - LoadScreenShot(Picker_GetSelectedItem(hwndList), TabView_GetCurrentTab(hTabCtrl)); - } + LoadScreenShot(Picker_GetSelectedItem(hwndList), NULL, TabView_GetCurrentTab(hTabCtrl)); // figure out if we have a history or not, to place our other windows properly UpdateHistory(); // setup the picture area - if (GetShowScreenShot()) + if (bShowImage) { DWORD dwStyle; DWORD dwStyleEx; @@ -1348,31 +1309,24 @@ void UpdateScreenShot(void) GetWindowRect(GetDlgItem(hMain, IDC_SSFRAME), &fRect); OffsetRect(&fRect, -p.x, -p.y); - // show history on this tab IFF + // show history on this tab IF // - we have history for the game // - we're on the first tab // - we DON'T have a separate history tab - showing_history = (have_history && (TabView_GetCurrentTab(hTabCtrl) == GetHistoryTab() || GetHistoryTab() == TAB_ALL ) && - GetShowTab(TAB_HISTORY) == FALSE); + showing_history = (have_history && (TabView_GetCurrentTab(hTabCtrl) == GetHistoryTab() || GetHistoryTab() == TAB_ALL ) && GetShowTab(TAB_HISTORY) == false); CalculateBestScreenShotRect(GetDlgItem(hMain, IDC_SSFRAME), &rect,showing_history); dwStyle = GetWindowLong(GetDlgItem(hMain, IDC_SSPICTURE), GWL_STYLE); dwStyleEx = GetWindowLong(GetDlgItem(hMain, IDC_SSPICTURE), GWL_EXSTYLE); - AdjustWindowRectEx(&rect, dwStyle, FALSE, dwStyleEx); - MoveWindow(GetDlgItem(hMain, IDC_SSPICTURE), - fRect.left + rect.left, - fRect.top + rect.top, - rect.right - rect.left, - rect.bottom - rect.top, - TRUE); + AdjustWindowRectEx(&rect, dwStyle, false, dwStyleEx); + MoveWindow(GetDlgItem(hMain, IDC_SSPICTURE), fRect.left + rect.left, fRect.top + rect.top, rect.right - rect.left, rect.bottom - rect.top, true); - ShowWindow(GetDlgItem(hMain,IDC_SSPICTURE), - (TabView_GetCurrentTab(hTabCtrl) != TAB_HISTORY) ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(hMain,IDC_SSPICTURE), (TabView_GetCurrentTab(hTabCtrl) != TAB_HISTORY) ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hMain,IDC_SSFRAME),SW_SHOW); ShowWindow(GetDlgItem(hMain,IDC_SSTAB),bShowTabCtrl ? SW_SHOW : SW_HIDE); - InvalidateRect(GetDlgItem(hMain,IDC_SSPICTURE),NULL,FALSE); + InvalidateRect(GetDlgItem(hMain,IDC_SSPICTURE),NULL,false); } else { @@ -1387,12 +1341,10 @@ void ResizePickerControls(HWND hWnd) { RECT frameRect; RECT rect, sRect; - int nListWidth, nScreenShotWidth; - static BOOL firstTime = TRUE; - int doSSControls = TRUE; - int i, nSplitterCount; + static BOOL firstTime = true; + int doSSControls = true; - nSplitterCount = GetSplitterCount(); + int nSplitterCount = GetSplitterCount(); /* Size the List Control in the Picker */ GetClientRect(hWnd, &rect); @@ -1402,7 +1354,7 @@ void ResizePickerControls(HWND hWnd) { RECT rWindow; - for (i = 0; i < nSplitterCount; i++) + for (int i = 0; i < nSplitterCount; i++) nSplitterOffset[i] = rect.right * g_splitterInfo[i].dPosition; GetWindowRect(hStatusBar, &rWindow); @@ -1411,12 +1363,10 @@ void ResizePickerControls(HWND hWnd) topMargin = rWindow.bottom - rWindow.top; /*buttonMargin = (sRect.bottom + 4); */ - firstTime = FALSE; + firstTime = false; } else - { - doSSControls = GetShowScreenShot(); - } + doSSControls = BIT(GetWindowPanes(), 3); if (bShowStatusBar) rect.bottom -= bottomMargin; @@ -1424,24 +1374,22 @@ void ResizePickerControls(HWND hWnd) if (bShowToolBar) rect.top += topMargin; - MoveWindow(GetDlgItem(hWnd, IDC_DIVIDER), rect.left, rect.top - 4, rect.right, 2, TRUE); + MoveWindow(GetDlgItem(hWnd, IDC_DIVIDER), rect.left, rect.top - 4, rect.right, 2, true); - ResizeTreeAndListViews(TRUE); + ResizeTreeAndListViews(true); - nListWidth = nSplitterOffset[nSplitterCount-1]; - nScreenShotWidth = (rect.right - nListWidth) - 4; + int nListWidth = nSplitterOffset[nSplitterCount-1]; + int nScreenShotWidth = (rect.right - nListWidth) - 4; /* Screen shot Page tab control */ if (bShowTabCtrl) { - MoveWindow(GetDlgItem(hWnd, IDC_SSTAB), nListWidth + 4, rect.top + 2, - nScreenShotWidth - 2, rect.top + 20, doSSControls); + MoveWindow(GetDlgItem(hWnd, IDC_SSTAB), nListWidth + 4, rect.top + 2, nScreenShotWidth - 2, rect.top + 20, doSSControls); rect.top += 20; } /* resize the Screen shot frame */ - MoveWindow(GetDlgItem(hWnd, IDC_SSFRAME), nListWidth + 4, rect.top + 2, - nScreenShotWidth - 2, (rect.bottom - rect.top) - 4, doSSControls); + MoveWindow(GetDlgItem(hWnd, IDC_SSFRAME), nListWidth + 4, rect.top + 2, nScreenShotWidth - 2, (rect.bottom - rect.top) - 4, doSSControls); /* The screen shot controls */ GetClientRect(GetDlgItem(hWnd, IDC_SSFRAME), &frameRect); @@ -1450,7 +1398,6 @@ void ResizePickerControls(HWND hWnd) sRect.left = nListWidth + 14; sRect.right = sRect.left + (nScreenShotWidth - 22); - if (GetShowTab(TAB_HISTORY)) { // We're using the new mode, with the history filling the entire tab (almost) @@ -1464,12 +1411,9 @@ void ResizePickerControls(HWND hWnd) sRect.bottom = (rect.bottom - rect.top) - 278; } - MoveWindow(GetDlgItem(hWnd, IDC_HISTORY), - sRect.left, sRect.top, - sRect.right - sRect.left, sRect.bottom, doSSControls); + MoveWindow(GetDlgItem(hWnd, IDC_HISTORY), sRect.left, sRect.top, sRect.right - sRect.left, sRect.bottom, doSSControls); /* the other screen shot controls will be properly placed in UpdateScreenshot() */ - } @@ -1520,7 +1464,7 @@ HPALETTE GetBackgroundPalette(void) return hPALbg; } -MYBITMAPINFO * GetBackgroundInfo(void) +MYBITMAPINFO *GetBackgroundInfo(void) { return &bmDesc; } @@ -1554,10 +1498,8 @@ int GetParentRomSetIndex(const game_driver *driver) int nParentIndex = GetGameNameIndex(driver->parent); if( nParentIndex >= 0) - { if ((driver_list::driver(nParentIndex).flags & MACHINE_IS_BIOS_ROOT) == 0) return nParentIndex; - } return -1; } @@ -1598,11 +1540,10 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) extern const FILTER_ITEM g_filterList[]; LONG common_control_version = GetCommonControlVersion(); int validity_failed = 0; - TCHAR* t_inpdir = NULL; LONG_PTR l; if (!OptionsInit()) - return FALSE; + return false; srand((unsigned)time(NULL)); @@ -1614,13 +1555,13 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) memset(icon_index, '\0', sizeof(int) * driver_list::total()); // set up window class - wndclass.style = CS_HREDRAW | CS_VREDRAW; + wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = MameWindowProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = DLGWINDOWEXTRA; - wndclass.hInstance = hInstance; - wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAMEUI_ICON)); - wndclass.hCursor = NULL; + wndclass.hInstance = hInstance; + wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAMEUI_ICON)); + wndclass.hCursor = NULL; wndclass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_UI_MENU); wndclass.lpszClassName = TEXT("MainClass"); @@ -1636,35 +1577,29 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) xpControl = (common_control_version >= PACKVERSION(6,0)); if (oldControl) { - char buf[] = MAMEUINAME " has detected an old version of comctl32.dll\n\n" - "Game Properties, many configuration options and\n" - "features are not available without an updated DLL\n\n"; + char buf[] = MAMEUINAME " has detected an old version of comctl32.dll.\n\n" + "Various features are not available without an updated DLL.\n\n"; - win_message_box_utf8(0, buf, MAMEUINAME " Outdated comctl32.dll Warning", MB_OK | MB_ICONWARNING); + win_message_box_utf8(0, buf, MAMEUINAME " Outdated comctl32.dll Error", MB_OK | MB_ICONWARNING); + return false; } g_mame32_message = RegisterWindowMessage(TEXT("MAME32")); HelpInit(); - t_inpdir = ui_wstring_from_utf8(GetInpDir()); - if( ! t_inpdir ) - return FALSE; - - _tcscpy(last_directory,t_inpdir); - free(t_inpdir); hMain = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, NULL); if (hMain == NULL) { dprintf("error creating main dialog, aborting\n"); - return FALSE; + return false; } s_pWatcher = DirWatcher_Init(hMain, WM_MAME32_FILECHANGED); if (s_pWatcher) { - DirWatcher_Watch(s_pWatcher, 0, GetRomDirs(), TRUE); - DirWatcher_Watch(s_pWatcher, 1, GetSampleDirs(), TRUE); + DirWatcher_Watch(s_pWatcher, 0, GetRomDirs(), true); + DirWatcher_Watch(s_pWatcher, 1, GetSampleDirs(), true); } SetMainTitle(); @@ -1691,7 +1626,7 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) opts.nTabCount = MAX_TAB_TYPES; if (!SetupTabView(hTabCtrl, &opts)) - return FALSE; + return false; } /* subclass history window */ @@ -1741,7 +1676,7 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) hwndList = GetDlgItem(hMain, IDC_LIST); if (!InitSplitters()) - return FALSE; + return false; nSplitterCount = GetSplitterCount(); for (i = 0; i < nSplitterCount; i++) @@ -1763,10 +1698,10 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) TabView_UpdateSelection(hTabCtrl); bDoGameCheck = GetGameCheck(); - idle_work = TRUE; + idle_work = true; game_index = 0; - bShowTree = GetShowFolderList(); + BOOL bShowTree = BIT(GetWindowPanes(), 0); bShowToolBar = GetShowToolBar(); bShowStatusBar = GetShowStatusBar(); bShowTabCtrl = GetShowTabCtrl(); @@ -1786,12 +1721,14 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) EnableMenuItem(GetMenu(hMain), ID_OPTIONS_DEFAULTS, MF_GRAYED); } +#ifdef UI_DIRECTDRAW /* Init DirectDraw */ if (!DirectDraw_Initialize()) { DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIRECTX), NULL, DirectXDialogProc); - return FALSE; + return false; } +#endif LoadBackgroundBitmap(); @@ -1814,14 +1751,14 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) } hFont = CreateFontIndirect(&logfont); if (hFont ) - SetAllWindowsFont(hMain, &main_resize, hFont, FALSE); + SetAllWindowsFont(hMain, &main_resize, hFont, false); } /* Init DirectInput */ if (!DirectInputInitialize()) { DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIRECTX), NULL, DirectXDialogProc); - return FALSE; + return false; } AdjustMetrics(); @@ -1832,7 +1769,7 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) /* clear keyboard state */ KeyboardStateClear(); - if (GetJoyGUI() == TRUE) + if (GetJoyGUI() == true) { g_pJoyGUI = &DIJoystick; if (g_pJoyGUI->init() != 0) @@ -1853,7 +1790,7 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) SetCursorPos(GetSystemMetrics(SM_CXSCREEN)/2,GetSystemMetrics(SM_CYSCREEN)/2); // Then hide it - ShowCursor(FALSE); + ShowCursor(false); } nCmdShow = GetWindowState(); @@ -1910,7 +1847,7 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) "still work, but emulations will fail to execute", MAMEUINAME, MB_OK | MB_ICONERROR); } - return TRUE; + return true; } @@ -1954,7 +1891,9 @@ static void Win32UI_exit() DestroyAcceleratorTable(hAccel); DirectInputClose(); +#ifdef UI_DIRECTDRAW DirectDraw_Close(); +#endif SetSavedFolderID(GetCurrentFolderID()); SaveGameListOptions(); @@ -1967,8 +1906,6 @@ static void Win32UI_exit() FreeScreenShot(); - OptionsExit(); - HelpExit(); pool_free_lib(mameui_pool); @@ -2004,7 +1941,7 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L case WM_INITDIALOG: /* Initialize info for resizing subitems */ GetClientRect(hWnd, &main_resize.rect); - return TRUE; + return true; case WM_SETFOCUS: SetFocus(hwndList); @@ -2016,23 +1953,22 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L case WM_SIZE: OnSize(hWnd, wParam, LOWORD(lParam), HIWORD(wParam)); - return TRUE; + return true; case WM_MENUSELECT: return Statusbar_MenuSelect(hWnd, wParam, lParam); case MM_PLAY_GAME: MamePlayGame(); - return TRUE; + return true; case WM_INITMENUPOPUP: UpdateMenu(GetMenu(hWnd)); break; case WM_CONTEXTMENU: - if (HandleTreeContextMenu(hWnd, wParam, lParam) - || HandleScreenShotContextMenu(hWnd, wParam, lParam)) - return FALSE; + if (HandleTreeContextMenu(hWnd, wParam, lParam) || HandleScreenShotContextMenu(hWnd, wParam, lParam)) + return false; break; case WM_COMMAND: @@ -2059,7 +1995,7 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L default: break; } - return TRUE; + return true; case WM_CLOSE: { @@ -2109,7 +2045,8 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L /* Save the users current game options and default game */ nItem = Picker_GetSelectedItem(hwndList); - SetDefaultGame(ModifyThe(driver_list::driver(nItem).name)); + if (nItem >= 0) + SetDefaultGame(nItem); /* hide window to prevent orphan empty rectangles on the taskbar */ /* ShowWindow(hWnd,SW_HIDE); */ @@ -2145,7 +2082,7 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L case WM_MOUSEMOVE: { if (MouseHasBeenMoved()) - ShowCursor(TRUE); + ShowCursor(true); if (g_listview_dragging) MouseMoveListViewDrag(MAKEPOINTS(lParam)); @@ -2218,7 +2155,7 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L SelectObject(hDC,hFontOld); ReleaseDC(NULL,hDC); - return TRUE; + return true; } case WM_MAME32_FILECHANGED: @@ -2226,8 +2163,8 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L char szFileName[32]; char *s; int nGameIndex; - int (*pfnGetAuditResults)(int driver_index) = NULL; - void (*pfnSetAuditResults)(int driver_index, int audit_results) = NULL; + int (*pfnGetAuditResults)(uint32_t driver_index) = NULL; + void (*pfnSetAuditResults)(uint32_t driver_index, int audit_results) = NULL; switch(HIWORD(wParam)) { @@ -2305,6 +2242,7 @@ static LRESULT CALLBACK MameWindowProc(HWND hWnd, UINT message, WPARAM wParam, L default: break; } + res++; return DefWindowProc(hWnd, message, wParam, lParam); } @@ -2314,26 +2252,26 @@ static int HandleKeyboardGUIMessage(HWND hWnd, UINT message, UINT wParam, LONG l { case WM_CHAR: /* List-View controls use this message for searching the items "as user types" */ //MessageBox(NULL,"wm_char message arrived","TitleBox",MB_OK); - return TRUE; + return true; case WM_KEYDOWN: KeyboardKeyDown(0, wParam, lParam); - return TRUE; + return true; case WM_KEYUP: KeyboardKeyUp(0, wParam, lParam); - return TRUE; + return true; case WM_SYSKEYDOWN: KeyboardKeyDown(1, wParam, lParam); - return TRUE; + return true; case WM_SYSKEYUP: KeyboardKeyUp(1, wParam, lParam); - return TRUE; + return true; } - return FALSE; /* message not processed */ + return false; /* message not processed */ } static BOOL PumpMessage() @@ -2341,11 +2279,11 @@ static BOOL PumpMessage() MSG msg; if (!GetMessage(&msg, NULL, 0, 0)) - return FALSE; + return false; if (IsWindow(hMain)) { - BOOL absorbed_key = FALSE; + BOOL absorbed_key = false; if (GetKeyGUI()) absorbed_key = HandleKeyboardGUIMessage(msg.hwnd, msg.message, msg.wParam, msg.lParam); else @@ -2361,19 +2299,19 @@ static BOOL PumpMessage() } } - return TRUE; + return true; } static BOOL FolderCheck(void) { - char *pDescription = NULL; + const char *pDescription = NULL; int nGameIndex = 0; int i=0; int iStep = 0; LV_FINDINFO lvfi; int nCount = ListView_GetItemCount(hwndList); - BOOL changed = FALSE; + BOOL changed = false; BOOL res; MSG msg; @@ -2392,7 +2330,7 @@ static BOOL FolderCheck(void) if( nCount > 0) ProgressBarShow(); else - return FALSE; + return false; if( nCount < 100 ) iStep = 100 / nCount; else @@ -2411,13 +2349,13 @@ static BOOL FolderCheck(void) if (GetRomAuditResults(nGameIndex) == UNKNOWN) { MameUIVerifyRomSet(nGameIndex, 0); - changed = TRUE; + changed = true; } if (GetSampleAuditResults(nGameIndex) == UNKNOWN) { MameUIVerifySampleSet(nGameIndex); - changed = TRUE; + changed = true; } lvfi.flags = LVFI_PARAM; @@ -2433,22 +2371,26 @@ static BOOL FolderCheck(void) DispatchMessage(&msg); } } - changed = FALSE; + changed = false; if ((i % iStep) == 0) ProgressBarStepParam(i, nCount); } ProgressBarHide(); - pDescription = ModifyThe(driver_list::driver(Picker_GetSelectedItem(hwndList)).description); + if (Picker_GetSelectedItem(hwndList) >= 0) + pDescription = ModifyThe(driver_list::driver(Picker_GetSelectedItem(hwndList)).type.fullname()); + else + pDescription = "No Selection"; SetStatusBarText(0, pDescription); UpdateStatusBar(); - return TRUE; + res++; + return true; } static BOOL GameCheck(void) { LV_FINDINFO lvfi; int i; - BOOL changed = FALSE; + BOOL changed = false; BOOL res; if (game_index == 0) @@ -2456,22 +2398,22 @@ static BOOL GameCheck(void) if (game_index >= driver_list::total()) { - bDoGameCheck = FALSE; + bDoGameCheck = false; ProgressBarHide(); ResetWhichGamesInFolders(); - return FALSE; + return false; } if (GetRomAuditResults(game_index) == UNKNOWN) { MameUIVerifyRomSet(game_index, 0); - changed = TRUE; + changed = true; } if (GetSampleAuditResults(game_index) == UNKNOWN) { MameUIVerifySampleSet(game_index); - changed = TRUE; + changed = true; } lvfi.flags = LVFI_PARAM; @@ -2483,22 +2425,22 @@ static BOOL GameCheck(void) if ((game_index % progBarStep) == 0) ProgressBarStep(); game_index++; - + res++; return changed; } static BOOL OnIdle(HWND hWnd) { - static int bFirstTime = TRUE; - static int bResetList = TRUE; + static int bFirstTime = true; + static int bResetList = true; - char *pDescription; + const char *pDescription; int driver_index; if (bFirstTime) { - bResetList = FALSE; - bFirstTime = FALSE; + bResetList = false; + bFirstTime = false; } if (bDoGameCheck) { @@ -2513,35 +2455,38 @@ static BOOL OnIdle(HWND hWnd) // in case it's not found, get it back driver_index = Picker_GetSelectedItem(hwndList); + if (driver_index >= 0) + pDescription = ModifyThe(driver_list::driver(driver_index).type.fullname()); + else + pDescription = "No Selection"; - pDescription = ModifyThe(driver_list::driver(driver_index).description); SetStatusBarText(0, pDescription); - idle_work = FALSE; + idle_work = false; UpdateStatusBar(); - bFirstTime = TRUE; + bFirstTime = true; if (!idle_work) - PostMessage(GetMainWindow(),WM_COMMAND, MAKEWPARAM(ID_VIEW_LINEUPICONS, TRUE),(LPARAM)NULL); + PostMessage(GetMainWindow(),WM_COMMAND, MAKEWPARAM(ID_VIEW_LINEUPICONS, true),(LPARAM)NULL); return idle_work; } static void OnSize(HWND hWnd, UINT nState, int nWidth, int nHeight) { - static BOOL firstTime = TRUE; + static BOOL firstTime = true; if (nState != SIZE_MAXIMIZED && nState != SIZE_RESTORED) return; ResizeWindow(hWnd, &main_resize); ResizeProgressBar(); - if (firstTime == FALSE) + if (firstTime == false) OnSizeSplitter(hMain); - //firstTime = FALSE; + //firstTime = false; /* Update the splitters structures as appropriate */ RecalcSplitters(); - if (firstTime == FALSE) + if (firstTime == false) ResizePickerControls(hMain); - firstTime = FALSE; + firstTime = false; UpdateScreenShot(); } @@ -2652,7 +2597,7 @@ static void ResizeWindow(HWND hParent, Resize *r) } MoveWindow(hControl, rect.left, rect.top, (rect.right - rect.left), - (rect.bottom - rect.top), TRUE); + (rect.bottom - rect.top), true); /* Take care of subcontrols, if appropriate */ if (ri->subwindow ) @@ -2684,9 +2629,9 @@ static void ProgressBarShow() MoveWindow(hProgWnd, rect.left, rect.top, rect.right - rect.left, - rect.bottom - rect.top, TRUE); + rect.bottom - rect.top, true); - bProgressShown = TRUE; + bProgressShown = true; } static void ProgressBarHide() @@ -2726,7 +2671,7 @@ static void ProgressBarHide() SendMessage(hStatusBar, SB_SETPARTS, (WPARAM)numParts, (LPARAM)(LPINT)widths); UpdateStatusBar(); - bProgressShown = FALSE; + bProgressShown = false; } static void ResizeProgressBar() @@ -2740,7 +2685,7 @@ static void ResizeProgressBar() StatusBar_GetItemRect(hStatusBar, 1, &rect); MoveWindow(hProgWnd, rect.left, rect.top, rect.right - rect.left, - rect.bottom - rect.top, TRUE); + rect.bottom - rect.top, true); } else { @@ -2779,7 +2724,7 @@ static void CopyToolTipText(LPTOOLTIPTEXT lpttt) int i; int iButton = lpttt->hdr.idFrom; static TCHAR String[1024]; - BOOL bConverted = FALSE; + BOOL bConverted = false; TCHAR* t_gameinfostatus; /* Map command ID to string index */ @@ -2788,7 +2733,7 @@ static void CopyToolTipText(LPTOOLTIPTEXT lpttt) if (CommandToString[i] == iButton) { iButton = i; - bConverted = TRUE; + bConverted = true; break; } } @@ -2812,7 +2757,7 @@ static void CopyToolTipText(LPTOOLTIPTEXT lpttt) SendMessage(hStatusBar, SB_GETTEXT, (WPARAM)iButton, (LPARAM)&String ); else { //for first pane we get the Status directly, to get the line breaks - t_gameinfostatus = ui_wstring_from_utf8( GameInfoStatus(Picker_GetSelectedItem(hwndList), FALSE)); + t_gameinfostatus = ui_wstring_from_utf8( GameInfoStatus(Picker_GetSelectedItem(hwndList), false)); if( !t_gameinfostatus ) return; _tcscpy(String, t_gameinfostatus); @@ -2932,7 +2877,7 @@ static void UpdateStatusBar() DisableSelection(); else { - const char* pStatus = GameInfoStatus(i, FALSE); + const char* pStatus = GameInfoStatus(i, false); SetStatusBarText(1, pStatus); } } @@ -2944,20 +2889,20 @@ static void UpdateHistory(void) TEXTMETRIC tm ; int nLines, nLineHeight; //DWORD dwStyle = GetWindowLong(GetDlgItem(hMain, IDC_HISTORY), GWL_STYLE); - have_history = FALSE; + have_history = false; if (GetSelectedPick() >= 0) { char *histText = GetGameHistory(Picker_GetSelectedItem(hwndList)); - have_history = (histText && histText[0]) ? TRUE : FALSE; + have_history = (histText && histText[0]) ? true : false; win_set_window_text_utf8(GetDlgItem(hMain, IDC_HISTORY), histText); } - if (have_history && GetShowScreenShot() + if (have_history && BIT(GetWindowPanes(), 3) && ((TabView_GetCurrentTab(hTabCtrl) == TAB_HISTORY) || - (TabView_GetCurrentTab(hTabCtrl) == GetHistoryTab() && GetShowTab(TAB_HISTORY) == FALSE) || - (TAB_ALL == GetHistoryTab() && GetShowTab(TAB_HISTORY) == FALSE) )) + (TabView_GetCurrentTab(hTabCtrl) == GetHistoryTab() && GetShowTab(TAB_HISTORY) == false) || + (TAB_ALL == GetHistoryTab() && GetShowTab(TAB_HISTORY) == false) )) { Edit_GetRect(GetDlgItem(hMain, IDC_HISTORY),&rect); nLines = Edit_GetLineCount(GetDlgItem(hMain, IDC_HISTORY) ); @@ -2967,12 +2912,12 @@ static void UpdateHistory(void) if( ( (rect.bottom - rect.top) / nLineHeight) < (nLines) ) { //more than one Page, so show Scrollbar - SetScrollRange(GetDlgItem(hMain, IDC_HISTORY), SB_VERT, 0, nLines, TRUE); + SetScrollRange(GetDlgItem(hMain, IDC_HISTORY), SB_VERT, 0, nLines, true); } else { //hide Scrollbar - SetScrollRange(GetDlgItem(hMain, IDC_HISTORY),SB_VERT, 0, 0, TRUE); + SetScrollRange(GetDlgItem(hMain, IDC_HISTORY),SB_VERT, 0, 0, true); } ShowWindow(GetDlgItem(hMain, IDC_HISTORY), SW_SHOW); @@ -2994,7 +2939,7 @@ static void DisableSelection() mmi.fType = MFT_STRING; mmi.dwTypeData = (TCHAR *) TEXT("&Play"); mmi.cch = _tcslen(mmi.dwTypeData); - SetMenuItemInfo(hMenu, ID_FILE_PLAY, FALSE, &mmi); + SetMenuItemInfo(hMenu, ID_FILE_PLAY, false, &mmi); EnableMenuItem(hMenu, ID_FILE_PLAY, MF_GRAYED); EnableMenuItem(hMenu, ID_FILE_PLAY_RECORD, MF_GRAYED); @@ -3004,7 +2949,7 @@ static void DisableSelection() SetStatusBarText(1, ""); SetStatusBarText(3, ""); - have_selection = FALSE; + have_selection = false; if (prev_have_selection != have_selection) UpdateScreenShot(); @@ -3018,7 +2963,7 @@ static void EnableSelection(int nGame) HMENU hMenu = GetMenu(hMain); TCHAR* t_description; - t_description = ui_wstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).description))); + t_description = ui_wstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).type.fullname()))); if( !t_description ) return; @@ -3028,12 +2973,12 @@ static void EnableSelection(int nGame) mmi.fType = MFT_STRING; mmi.dwTypeData = buf; mmi.cch = _tcslen(mmi.dwTypeData); - SetMenuItemInfo(hMenu, ID_FILE_PLAY, FALSE, &mmi); + SetMenuItemInfo(hMenu, ID_FILE_PLAY, false, &mmi); - pText = ModifyThe(driver_list::driver(nGame).description); + pText = ModifyThe(driver_list::driver(nGame).type.fullname()); SetStatusBarText(0, pText); /* Add this game's status to the status bar */ - pText = GameInfoStatus(nGame, FALSE); + pText = GameInfoStatus(nGame, false); SetStatusBarText(1, pText); SetStatusBarText(3, ""); @@ -3045,11 +2990,10 @@ static void EnableSelection(int nGame) if (!oldControl) EnableMenuItem(hMenu, ID_GAME_PROPERTIES, MF_ENABLED); - if (bProgressShown && bListReady == TRUE) - { - SetDefaultGame(ModifyThe(driver_list::driver(nGame).name)); - } - have_selection = TRUE; + if (bProgressShown && bListReady == true) + SetDefaultGame(nGame); + + have_selection = true; UpdateScreenShot(); @@ -3093,7 +3037,7 @@ static void PaintBackgroundImage(HWND hWnd, HRGN hRgn, int x, int y) if (GetDeviceCaps(htempDC, RASTERCAPS) & RC_PALETTE && hPAL) { - SelectPalette(htempDC, hPAL, FALSE); + SelectPalette(htempDC, hPAL, false); RealizePalette(htempDC); } @@ -3117,11 +3061,11 @@ static LPCSTR GetCloneParentName(int nItem) { int nParentIndex = -1; - if (DriverIsClone(nItem) == TRUE) + if (DriverIsClone(nItem) == true) { nParentIndex = GetParentIndex(&driver_list::driver(nItem)); if( nParentIndex >= 0) - return ModifyThe(driver_list::driver(nParentIndex).description); + return ModifyThe(driver_list::driver(nParentIndex).type.fullname()); } return ""; } @@ -3147,7 +3091,7 @@ static BOOL TreeViewNotify(LPNMHDR nm) UpdateScreenShot(); } } - return TRUE; + return true; } case TVN_BEGINLABELEDIT : { @@ -3157,11 +3101,11 @@ static BOOL TreeViewNotify(LPNMHDR nm) if (folder->m_dwFlags & F_CUSTOM) { // user can edit custom folder names - g_in_treeview_edit = TRUE; - return FALSE; + g_in_treeview_edit = true; + return false; } // user can't edit built in folder names - return TRUE; + return true; } case TVN_ENDLABELEDIT : { @@ -3170,14 +3114,14 @@ static BOOL TreeViewNotify(LPNMHDR nm) char* utf8_szText; BOOL result; - g_in_treeview_edit = FALSE; + g_in_treeview_edit = false; if (ptvdi->item.pszText == NULL || _tcslen(ptvdi->item.pszText) == 0) - return FALSE; + return false; utf8_szText = ui_utf8_from_wstring(ptvdi->item.pszText); if( !utf8_szText ) - return FALSE; + return false; result = TryRenameCustomFolder(folder, utf8_szText); @@ -3186,7 +3130,7 @@ static BOOL TreeViewNotify(LPNMHDR nm) return result; } } - return FALSE; + return false; } @@ -3282,7 +3226,7 @@ static void check_for_GUI_action(void) case ID_GAME_PROPERTIES: case ID_CONTEXT_FILTERS: case ID_UI_START: - KeyboardStateClear(); /* beacuse whe won't receive KeyUp mesage when we loose focus */ + KeyboardStateClear(); /* because whe won't receive KeyUp mesage when we lose focus */ break; default: break; @@ -3441,11 +3385,6 @@ static void KeyboardKeyUp(int syskey, int vk_code, int special) static void PollGUIJoystick() { - // For the exec timer, will keep track of how long the button has been pressed - static int exec_counter = 0; - const char* exec_command; - TCHAR* t_exec_command; - if (in_emulation) return; @@ -3454,100 +3393,87 @@ static void PollGUIJoystick() g_pJoyGUI->poll_joysticks(); - // User pressed UP - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyUp(0), GetUIJoyUp(1), GetUIJoyUp(2),GetUIJoyUp(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyUp(0), GetUIJoyUp(1), GetUIJoyUp(2), GetUIJoyUp(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_UP, 0); - } // User pressed DOWN - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyDown(0), GetUIJoyDown(1), GetUIJoyDown(2),GetUIJoyDown(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyDown(0), GetUIJoyDown(1), GetUIJoyDown(2), GetUIJoyDown(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_DOWN, 0); - } // User pressed LEFT - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyLeft(0), GetUIJoyLeft(1), GetUIJoyLeft(2),GetUIJoyLeft(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyLeft(0), GetUIJoyLeft(1), GetUIJoyLeft(2), GetUIJoyLeft(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_LEFT, 0); - } // User pressed RIGHT - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyRight(0), GetUIJoyRight(1), GetUIJoyRight(2),GetUIJoyRight(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyRight(0), GetUIJoyRight(1), GetUIJoyRight(2), GetUIJoyRight(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_RIGHT, 0); - } // User pressed START GAME - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyStart(0), GetUIJoyStart(1), GetUIJoyStart(2),GetUIJoyStart(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyStart(0), GetUIJoyStart(1), GetUIJoyStart(2), GetUIJoyStart(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_START, 0); - } // User pressed PAGE UP - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyPageUp(0), GetUIJoyPageUp(1), GetUIJoyPageUp(2),GetUIJoyPageUp(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyPageUp(0), GetUIJoyPageUp(1), GetUIJoyPageUp(2), GetUIJoyPageUp(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_PGUP, 0); - } // User pressed PAGE DOWN - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyPageDown(0), GetUIJoyPageDown(1), GetUIJoyPageDown(2),GetUIJoyPageDown(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyPageDown(0), GetUIJoyPageDown(1), GetUIJoyPageDown(2), GetUIJoyPageDown(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_PGDOWN, 0); - } // User pressed HOME - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyHome(0), GetUIJoyHome(1), GetUIJoyHome(2),GetUIJoyHome(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyHome(0), GetUIJoyHome(1), GetUIJoyHome(2), GetUIJoyHome(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_HOME, 0); - } // User pressed END - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyEnd(0), GetUIJoyEnd(1), GetUIJoyEnd(2),GetUIJoyEnd(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyEnd(0), GetUIJoyEnd(1), GetUIJoyEnd(2), GetUIJoyEnd(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_END, 0); - } // User pressed CHANGE SCREENSHOT - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoySSChange(0), GetUIJoySSChange(1), GetUIJoySSChange(2),GetUIJoySSChange(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoySSChange(0), GetUIJoySSChange(1), GetUIJoySSChange(2), GetUIJoySSChange(3)))) SendMessage(hMain, WM_COMMAND, IDC_SSFRAME, 0); - } // User pressed SCROLL HISTORY UP - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyHistoryUp(0), GetUIJoyHistoryUp(1), GetUIJoyHistoryUp(2),GetUIJoyHistoryUp(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyHistoryUp(0), GetUIJoyHistoryUp(1), GetUIJoyHistoryUp(2), GetUIJoyHistoryUp(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_HISTORY_UP, 0); - } // User pressed SCROLL HISTORY DOWN - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyHistoryDown(0), GetUIJoyHistoryDown(1), GetUIJoyHistoryDown(2),GetUIJoyHistoryDown(3)))) - { + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyHistoryDown(0), GetUIJoyHistoryDown(1), GetUIJoyHistoryDown(2), GetUIJoyHistoryDown(3)))) SendMessage(hMain, WM_COMMAND, ID_UI_HISTORY_DOWN, 0); - } - // User pressed EXECUTE COMMANDLINE - if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyExec(0), GetUIJoyExec(1), GetUIJoyExec(2),GetUIJoyExec(3)))) + // For the exec timer, will keep track of how long the button has been pressed + static int exec_counter = 0; + + // User pressed EXECUTE COMMANDLINE + // Note: this option is not documented, nor supported in the GUI. + if (g_pJoyGUI->is_joy_pressed(JOYCODE(GetUIJoyExec(0), GetUIJoyExec(1), GetUIJoyExec(2), GetUIJoyExec(3)))) { - if (++exec_counter >= GetExecWait()) // Button has been pressed > exec timeout + // validate + int execwait = GetExecWait(); + if (execwait < 1) + return; + if (++exec_counter >= execwait) // Button has been pressed > exec timeout { - PROCESS_INFORMATION pi; - STARTUPINFO si; + // validate + string exec_command = GetExecCommand(); + if (exec_command.empty()) + return; + TCHAR *t_exec_command = ui_wstring_from_utf8(exec_command.c_str()); + if( !t_exec_command ) + return; // Reset counter exec_counter = 0; + STARTUPINFO si; ZeroMemory( &si, sizeof(si) ); - ZeroMemory( &pi, sizeof(pi) ); si.dwFlags = STARTF_FORCEONFEEDBACK; si.cb = sizeof(si); - exec_command = GetExecCommand(); - t_exec_command = ui_wstring_from_utf8(exec_command); - if( !t_exec_command ) - return; - CreateProcess(NULL, t_exec_command, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); + PROCESS_INFORMATION pi; + ZeroMemory( &pi, sizeof(pi) ); + + CreateProcess(NULL, t_exec_command, NULL, NULL, false, 0, NULL, NULL, &si, &pi); free(t_exec_command); @@ -3568,7 +3494,7 @@ static void PollGUIJoystick() static void SetView(int menu_id) { - BOOL force_reset = FALSE; + BOOL force_reset = false; int i; // first uncheck previous menu item, check new one @@ -3578,7 +3504,7 @@ static void SetView(int menu_id) if (Picker_GetViewID(hwndList) == VIEW_GROUPED || menu_id == ID_VIEW_GROUPED) { // this changes the sort order, so redo everything - force_reset = TRUE; + force_reset = true; } for (i = 0; i < sizeof(s_nPickers) / sizeof(s_nPickers[0]); i++) @@ -3596,7 +3522,7 @@ static void ResetListView() int i; int current_game; LV_ITEM lvi; - BOOL no_selection = FALSE; + BOOL no_selection = false; LPTREEFOLDER lpFolder = GetCurrentFolder(); HRESULT res; BOOL b_res; @@ -3604,13 +3530,15 @@ static void ResetListView() if (!lpFolder) return; - /* If the last folder was empty, no_selection is TRUE */ - if (have_selection == FALSE) - no_selection = TRUE; + /* If the last folder was empty, no_selection is true */ + if (have_selection == false) + no_selection = true; current_game = Picker_GetSelectedItem(hwndList); + if (current_game < 0) + no_selection = true; - SetWindowRedraw(hwndList,FALSE); + SetWindowRedraw(hwndList,false); b_res = ListView_DeleteAllItems(hwndList); @@ -3656,17 +3584,16 @@ static void ResetListView() if (GetViewMode() == VIEW_SMALL_ICONS) SetView(ID_VIEW_SMALL_ICON); - SetWindowRedraw(hwndList, TRUE); + SetWindowRedraw(hwndList, true); UpdateStatusBar(); - + res++; + b_res++; } static void UpdateGameList(BOOL bUpdateRomAudit, BOOL bUpdateSampleAudit) { - int i; - - for (i = 0; i < driver_list::total(); i++) + for (int i = 0; i < driver_list::total(); i++) { if (bUpdateRomAudit && DriverUsesRoms(i)) SetRomAuditResults(i, UNKNOWN); @@ -3674,18 +3601,32 @@ static void UpdateGameList(BOOL bUpdateRomAudit, BOOL bUpdateSampleAudit) SetSampleAuditResults(i, UNKNOWN); } - idle_work = TRUE; - bDoGameCheck = TRUE; - game_index = 0; + idle_work = true; + bDoGameCheck = true; + game_index = 0; ReloadIcons(); // Let REFRESH also load new background if found LoadBackgroundBitmap(); - InvalidateRect(hMain,NULL,TRUE); + InvalidateRect(hMain,NULL,true); Picker_ResetIdle(hwndList); } +static void UpdateCache() +{ + int current_id = GetCurrentFolderID(); // remember selected folder + SetWindowRedraw(hwndList, false); // stop screen updating + ForceRebuild(); // tell system that cache needs redoing + (void)OptionsInit(); // reload options and fix game cache + //extern const FOLDERDATA g_folderData[]; + //extern const FILTER_ITEM g_filterList[]; + //InitTree(g_folderData, g_filterList); // redo folders... This crashes, leave out for now + ResetTreeViewFolders(); // something with folders + SelectTreeViewFolder(current_id); // select previous folder + SetWindowRedraw(hwndList, true); // refresh screen +} + UINT_PTR CALLBACK CFHookProc( HWND hdlg, // handle to dialog box UINT uiMsg, // message identifier @@ -3729,13 +3670,13 @@ UINT_PTR CALLBACK CFHookProc( SendDlgItemMessage(hdlg, cmb4, CB_ADDSTRING, 0, (LPARAM)TEXT("Custom")); SendDlgItemMessage(hdlg, cmb4, CB_SETITEMDATA,(WPARAM)iIndex,(LPARAM)cList); SendDlgItemMessage(hdlg, cmb4, CB_SETCURSEL,(WPARAM)iIndex,0 ); - return TRUE; + return true; } } } break; } - return FALSE; + return false; } static void PickFont(void) @@ -3772,7 +3713,7 @@ static void PickFont(void) textColor = RGB(240, 240, 240); } - SetAllWindowsFont(hMain, &main_resize, hFont, TRUE); + SetAllWindowsFont(hMain, &main_resize, hFont, true); hWnd = GetWindow(hMain, GW_CHILD); while(hWnd) @@ -3782,10 +3723,12 @@ static void PickFont(void) if (!_tcscmp(szClass, TEXT("SysListView32"))) { b_res = ListView_SetTextColor(hWnd, textColor); + b_res++; } else if (!_tcscmp(szClass, TEXT("SysTreeView32"))) { res = TreeView_SetTextColor(hTreeView, textColor); + res++; } } hWnd = GetWindow(hWnd, GW_HWNDNEXT); @@ -3822,7 +3765,7 @@ static void PickCloneColor(void) cClonecolor = GetListCloneColor(); PickColor( &cClonecolor); SetListCloneColor(cClonecolor); - InvalidateRect(hwndList,NULL,FALSE); + InvalidateRect(hwndList,NULL,false); } static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) @@ -3831,120 +3774,124 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) LPTREEFOLDER folder; char* utf8_szFile; BOOL res = 0; + int current_game = Picker_GetSelectedItem(hwndList); switch (id) { case ID_FILE_PLAY: MamePlayGame(); - return TRUE; + return true; case ID_FILE_PLAY_RECORD: MamePlayRecordGame(); - return TRUE; + return true; case ID_FILE_PLAY_BACK: MamePlayBackGame(); - return TRUE; + return true; case ID_FILE_PLAY_RECORD_WAVE: MamePlayRecordWave(); - return TRUE; + return true; case ID_FILE_PLAY_RECORD_MNG: MamePlayRecordMNG(); - return TRUE; + return true; case ID_FILE_PLAY_RECORD_AVI: MamePlayRecordAVI(); - return TRUE; + return true; case ID_FILE_LOADSTATE : MameLoadState(); - return TRUE; + return true; case ID_FILE_AUDIT: AuditDialog(hMain, 1); ResetWhichGamesInFolders(); ResetListView(); SetFocus(hwndList); - return TRUE; + return true; case ID_FILE_AUDIT_X: AuditDialog(hMain, 2); ResetWhichGamesInFolders(); ResetListView(); SetFocus(hwndList); - return TRUE; + return true; case ID_FILE_EXIT: PostMessage(hMain, WM_CLOSE, 0, 0); - return TRUE; + return true; case ID_VIEW_LARGE_ICON: SetView(ID_VIEW_LARGE_ICON); - return TRUE; + return true; case ID_VIEW_SMALL_ICON: SetView(ID_VIEW_SMALL_ICON); ResetListView(); - return TRUE; + return true; case ID_VIEW_LIST_MENU: SetView(ID_VIEW_LIST_MENU); - return TRUE; + return true; case ID_VIEW_DETAIL: SetView(ID_VIEW_DETAIL); - return TRUE; + return true; case ID_VIEW_GROUPED: SetView(ID_VIEW_GROUPED); - return TRUE; + return true; /* Arrange Icons submenu */ case ID_VIEW_BYGAME: - SetSortReverse(FALSE); + SetSortReverse(false); SetSortColumn(COLUMN_GAMES); Picker_Sort(hwndList); break; case ID_VIEW_BYDIRECTORY: - SetSortReverse(FALSE); + SetSortReverse(false); SetSortColumn(COLUMN_DIRECTORY); Picker_Sort(hwndList); break; case ID_VIEW_BYMANUFACTURER: - SetSortReverse(FALSE); + SetSortReverse(false); SetSortColumn(COLUMN_MANUFACTURER); Picker_Sort(hwndList); break; case ID_VIEW_BYTIMESPLAYED: - SetSortReverse(FALSE); + SetSortReverse(false); SetSortColumn(COLUMN_PLAYED); Picker_Sort(hwndList); break; case ID_VIEW_BYTYPE: - SetSortReverse(FALSE); + SetSortReverse(false); SetSortColumn(COLUMN_TYPE); Picker_Sort(hwndList); break; case ID_VIEW_BYYEAR: - SetSortReverse(FALSE); + SetSortReverse(false); SetSortColumn(COLUMN_YEAR); Picker_Sort(hwndList); break; case ID_VIEW_FOLDERS: - bShowTree = !bShowTree; - SetShowFolderList(bShowTree); + { + int val = GetWindowPanes() ^ 1; + BOOL bShowTree = BIT(val, 0); + SetWindowPanes(val); CheckMenuItem(GetMenu(hMain), ID_VIEW_FOLDERS, (bShowTree) ? MF_CHECKED : MF_UNCHECKED); ToolBar_CheckButton(s_hToolBar, ID_VIEW_FOLDERS, (bShowTree) ? MF_CHECKED : MF_UNCHECKED); UpdateScreenShot(); break; + } case ID_VIEW_TOOLBARS: bShowToolBar = !bShowToolBar; @@ -3972,7 +3919,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) ShowWindow(hTabCtrl, (bShowTabCtrl) ? SW_SHOW : SW_HIDE); ResizePickerControls(hMain); UpdateScreenShot(); - InvalidateRect(hMain,NULL,TRUE); + InvalidateRect(hMain,NULL,true); break; /* @@ -3986,7 +3933,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) case ID_TOOLBAR_EDIT: { - std::string buf; + string buf; HWND hToolbarEdit; buf = win_get_window_text_utf8(hwndCtl); @@ -4020,19 +3967,18 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) case ID_GAME_AUDIT: InitGameAudit(0); - if (!oldControl) - { - InitPropertyPageToPage(hInst, hwnd, GetSelectedPickItemIcon(), OPTIONS_GAME, -1, Picker_GetSelectedItem(hwndList), AUDIT_PAGE); - } + if (!oldControl && (current_game >= 0)) + InitPropertyPageToPage(hInst, hwnd, GetSelectedPickItemIcon(), OPTIONS_GAME, -1, current_game, AUDIT_PAGE); + /* Just in case the toggle MMX on/off */ UpdateStatusBar(); - break; + break; /* ListView Context Menu */ case ID_CONTEXT_ADD_CUSTOM: { - DialogBoxParam(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_CUSTOM_FILE), - hMain,AddCustomFileDialogProc,Picker_GetSelectedItem(hwndList)); + if (current_game >= 0) + DialogBoxParam(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_CUSTOM_FILE), hMain,AddCustomFileDialogProc, current_game); SetFocus(hwndList); break; } @@ -4045,43 +3991,62 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) /* Tree Context Menu */ case ID_CONTEXT_FILTERS: - if (DialogBox(GetModuleHandle(NULL), - MAKEINTRESOURCE(IDD_FILTERS), hMain, FilterDialogProc) == TRUE) + if (DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_FILTERS), hMain, FilterDialogProc) == true) ResetListView(); SetFocus(hwndList); - return TRUE; + return true; // ScreenShot Context Menu // select current tab - case ID_VIEW_TAB_SCREENSHOT : - case ID_VIEW_TAB_FLYER : - case ID_VIEW_TAB_CABINET : - case ID_VIEW_TAB_MARQUEE : - case ID_VIEW_TAB_TITLE : - case ID_VIEW_TAB_CONTROL_PANEL : - case ID_VIEW_TAB_PCB : + case ID_VIEW_TAB_SCREENSHOT: + case ID_VIEW_TAB_TITLE: + case ID_VIEW_TAB_SCORES: + case ID_VIEW_TAB_HOWTO: + case ID_VIEW_TAB_SELECT: + case ID_VIEW_TAB_VERSUS: + case ID_VIEW_TAB_BOSSES: + case ID_VIEW_TAB_COVER: + case ID_VIEW_TAB_ENDS: + case ID_VIEW_TAB_GAMEOVER: + case ID_VIEW_TAB_LOGO: + case ID_VIEW_TAB_ARTWORK: + case ID_VIEW_TAB_FLYER: + case ID_VIEW_TAB_CABINET: + case ID_VIEW_TAB_MARQUEE: + case ID_VIEW_TAB_CONTROL_PANEL: + case ID_VIEW_TAB_PCB: case ID_VIEW_TAB_HISTORY: - if (id == ID_VIEW_TAB_HISTORY && GetShowTab(TAB_HISTORY) == FALSE) + if (id == ID_VIEW_TAB_HISTORY && GetShowTab(TAB_HISTORY) == false) break; - TabView_SetCurrentTab(hTabCtrl, id - ID_VIEW_TAB_SCREENSHOT); + TabView_SetCurrentTab(hTabCtrl, id - ID_VIEW_TAB_ARTWORK); UpdateScreenShot(); TabView_UpdateSelection(hTabCtrl); break; // toggle tab's existence - case ID_TOGGLE_TAB_SCREENSHOT : - case ID_TOGGLE_TAB_FLYER : - case ID_TOGGLE_TAB_CABINET : - case ID_TOGGLE_TAB_MARQUEE : - case ID_TOGGLE_TAB_TITLE : - case ID_TOGGLE_TAB_CONTROL_PANEL : - case ID_TOGGLE_TAB_PCB : - case ID_TOGGLE_TAB_HISTORY : - { - int toggle_flag = id - ID_TOGGLE_TAB_SCREENSHOT; - - if (AllowedToSetShowTab(toggle_flag,!GetShowTab(toggle_flag)) == FALSE) + case ID_TOGGLE_TAB_SCREENSHOT: + case ID_TOGGLE_TAB_TITLE: + case ID_TOGGLE_TAB_SCORES: + case ID_TOGGLE_TAB_HOWTO: + case ID_TOGGLE_TAB_SELECT: + case ID_TOGGLE_TAB_VERSUS: + case ID_TOGGLE_TAB_BOSSES: + case ID_TOGGLE_TAB_COVER: + case ID_TOGGLE_TAB_ENDS: + case ID_TOGGLE_TAB_GAMEOVER: + case ID_TOGGLE_TAB_LOGO: + case ID_TOGGLE_TAB_ARTWORK: + case ID_TOGGLE_TAB_FLYER: + case ID_TOGGLE_TAB_CABINET: + case ID_TOGGLE_TAB_MARQUEE: + case ID_TOGGLE_TAB_CONTROL_PANEL: + case ID_TOGGLE_TAB_PCB: + case ID_TOGGLE_TAB_HISTORY: + { + int toggle_flag = id - ID_TOGGLE_TAB_ARTWORK; + + if (AllowedToSetShowTab(toggle_flag,!GetShowTab(toggle_flag)) == false) { // attempt to hide the last tab // should show error dialog? hide picture area? or ignore? @@ -4092,7 +4057,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) TabView_Reset(hTabCtrl); - if (TabView_GetCurrentTab(hTabCtrl) == toggle_flag && GetShowTab(toggle_flag) == FALSE) + if (TabView_GetCurrentTab(hTabCtrl) == toggle_flag && GetShowTab(toggle_flag) == false) { // we're deleting the tab we're on, so go to the next one TabView_CalculateNextTab(hTabCtrl); @@ -4112,27 +4077,27 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) /* Header Context Menu */ case ID_SORT_ASCENDING: - SetSortReverse(FALSE); + SetSortReverse(false); SetSortColumn(Picker_GetRealColumnFromViewColumn(hwndList, lastColumnClick)); Picker_Sort(hwndList); break; case ID_SORT_DESCENDING: - SetSortReverse(TRUE); + SetSortReverse(true); SetSortColumn(Picker_GetRealColumnFromViewColumn(hwndList, lastColumnClick)); Picker_Sort(hwndList); break; case ID_CUSTOMIZE_FIELDS: if (DialogBox(GetModuleHandle(NULL), - MAKEINTRESOURCE(IDD_COLUMNS), hMain, ColumnDialogProc) == TRUE) - ResetColumnDisplay(FALSE); + MAKEINTRESOURCE(IDD_COLUMNS), hMain, ColumnDialogProc) == true) + ResetColumnDisplay(false); SetFocus(hwndList); - return TRUE; + return true; /* View Menu */ case ID_VIEW_LINEUPICONS: - if( codeNotify == FALSE) + if( codeNotify == false) ResetListView(); else { @@ -4146,44 +4111,46 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) break; case ID_GAME_PROPERTIES: - if (!oldControl) - { - folder = GetFolderByName(FOLDER_SOURCE, GetDriverFilename(Picker_GetSelectedItem(hwndList)) ); - InitPropertyPage(hInst, hwnd, GetSelectedPickItemIcon(), OPTIONS_GAME, folder->m_nFolderId, Picker_GetSelectedItem(hwndList)); - } + if (!oldControl && (current_game >= 0)) + InitPropertyPageToPage(hInst, hwnd, GetSelectedPickItemIcon(), OPTIONS_GAME, -1, current_game, PROPERTIES_PAGE); + /* Just in case the toggle MMX on/off */ UpdateStatusBar(); break; + // NOT WORKING case ID_FOLDER_PROPERTIES: - if (!oldControl) + if (!oldControl && (current_game >= 0)) { OPTIONS_TYPE curOptType = OPTIONS_SOURCE; folder = GetSelectedFolder(); - if(folder->m_nFolderId == FOLDER_VECTOR) - curOptType = OPTIONS_VECTOR; + if (folder) + { + if(folder->m_nFolderId == FOLDER_VECTOR) + curOptType = OPTIONS_VECTOR; - InitPropertyPage(hInst, hwnd, GetSelectedFolderIcon(), curOptType, folder->m_nFolderId, Picker_GetSelectedItem(hwndList)); + InitPropertyPage(hInst, hwnd, GetSelectedFolderIcon(), curOptType, folder->m_nFolderId, current_game); + } } /* Just in case the toggle MMX on/off */ UpdateStatusBar(); break; case ID_FOLDER_SOURCEPROPERTIES: - if (!oldControl) + if (!oldControl && (current_game >= 0)) { - folder = GetFolderByName(FOLDER_SOURCE, GetDriverFilename(Picker_GetSelectedItem(hwndList)) ); - InitPropertyPage(hInst, hwnd, GetSelectedFolderIcon(), (folder->m_nFolderId == FOLDER_VECTOR) ? OPTIONS_VECTOR : OPTIONS_SOURCE , folder->m_nFolderId, Picker_GetSelectedItem(hwndList)); + //InitPropertyPage(hInst, hwnd, GetSelectedFolderIcon(), (folder->m_nFolderId == FOLDER_VECTOR) ? OPTIONS_VECTOR : OPTIONS_SOURCE , -1, current_game); + InitPropertyPage(hInst, hwnd, GetSelectedFolderIcon(), OPTIONS_SOURCE, -1, current_game); } /* Just in case the toggle MMX on/off */ UpdateStatusBar(); break; case ID_FOLDER_VECTORPROPERTIES: - if (!oldControl) + if (!oldControl && (current_game >= 0)) { folder = GetFolderByID( FOLDER_VECTOR ); - InitPropertyPage(hInst, hwnd, GetSelectedFolderIcon(), OPTIONS_VECTOR, folder->m_nFolderId, Picker_GetSelectedItem(hwndList)); + InitPropertyPage(hInst, hwnd, GetSelectedFolderIcon(), OPTIONS_VECTOR, folder->m_nFolderId, current_game); } /* Just in case the toggle MMX on/off */ UpdateStatusBar(); @@ -4200,16 +4167,20 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) break; case ID_UPDATE_GAMELIST: - UpdateGameList(TRUE, TRUE); + UpdateGameList(true, true); + break; + + case ID_UPDATE_CACHE: + UpdateCache(); break; case ID_OPTIONS_FONT: PickFont(); - return TRUE; + return true; case ID_OPTIONS_CLONE_COLOR: PickCloneColor(); - return TRUE; + return true; case ID_OPTIONS_DEFAULTS: /* Check the return value to see if changes were applied */ @@ -4218,7 +4189,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) InitDefaultPropertyPage(hInst, hwnd); } SetFocus(hwndList); - return TRUE; + return true; case ID_OPTIONS_DIR: { @@ -4230,27 +4201,27 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) SaveDefaultOptions(); SaveOptions(); - BOOL bUpdateRoms = ((nResult & DIRDLG_ROMS) == DIRDLG_ROMS) ? TRUE : FALSE; - BOOL bUpdateSamples = ((nResult & DIRDLG_SAMPLES) == DIRDLG_SAMPLES) ? TRUE : FALSE; + BOOL bUpdateRoms = ((nResult & DIRDLG_ROMS) == DIRDLG_ROMS) ? true : false; + BOOL bUpdateSamples = ((nResult & DIRDLG_SAMPLES) == DIRDLG_SAMPLES) ? true : false; if (s_pWatcher) { if (bUpdateRoms) - DirWatcher_Watch(s_pWatcher, 0, GetRomDirs(), TRUE); + DirWatcher_Watch(s_pWatcher, 0, GetRomDirs(), true); if (bUpdateSamples) - DirWatcher_Watch(s_pWatcher, 1, GetSampleDirs(), TRUE); + DirWatcher_Watch(s_pWatcher, 1, GetSampleDirs(), true); } /* update game list */ - if (bUpdateRoms == TRUE || bUpdateSamples == TRUE) + if (bUpdateRoms == true || bUpdateSamples == true) UpdateGameList(bUpdateRoms, bUpdateSamples); SetFocus(hwndList); } - return TRUE; + return true; case ID_OPTIONS_RESET_DEFAULTS: - if (DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_RESET), hMain, ResetDialogProc) == TRUE) + if (DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_RESET), hMain, ResetDialogProc) == true) { // these may have been changed SaveDefaultOptions(); @@ -4263,7 +4234,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) ResetListView(); SetFocus(hwndList); } - return TRUE; + return true; case ID_OPTIONS_INTERFACE: DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_INTERFACE_OPTIONS), hMain, InterfaceDialogProc); @@ -4275,26 +4246,52 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) SetTimer(hMain, SCREENSHOT_TIMER, GetCycleScreenshot()*1000, NULL ); // Scale to seconds } - return TRUE; + return true; + + case ID_VIDEO_SNAP: + { + int nGame = Picker_GetSelectedItem(hwndList); + if (nGame >= 0) + { + string path = GetVideoDir() + string("\\") + driver_list::driver(nGame).name + string(".mp4"); + ShellExecuteCommon(hMain, path.c_str()); + } + SetFocus(hwndList); + } + break; + + case ID_MANUAL: + { + int nGame = Picker_GetSelectedItem(hwndList); + if (nGame >= 0) + { + string path = GetManualsDir() + string("\\") + driver_list::driver(nGame).name + string(".pdf"); + ShellExecuteCommon(hMain, path.c_str()); + } + SetFocus(hwndList); + } + break; case ID_OPTIONS_BG: { - // More c++ stupidity with strings // Get the path from the existing filename; if no filename go to root TCHAR* t_bgdir = TEXT("."); - const char *s = GetBgDir(); - std::string as; - util::zippath_parent(as, s); + bool free_bgdir = false; + string as, s = GetBgDir(); + util::zippath_parent(as, s.c_str()); size_t t1 = as.length()-1; - if (as[t1] == '\\') as[t1]='\0'; + if (as[t1] == '\\') as.substr(0, t1-1); t1 = as.find(':'); - if (t1 > 0) + if (t1 != string::npos) + { t_bgdir = ui_wstring_from_utf8(as.c_str()); + free_bgdir = true; + if( !t_bgdir ) + return false; + } OPENFILENAME OFN; - static TCHAR szFile[MAX_PATH] = TEXT("\0"); - if( !t_bgdir ) - return FALSE; + TCHAR szFile[MAX_PATH] = TEXT("\0"); OFN.lStructSize = sizeof(OPENFILENAME); OFN.hwndOwner = hMain; @@ -4317,23 +4314,26 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) OFN.lpTemplateName = NULL; OFN.Flags = OFN_NOCHANGEDIR | OFN_SHOWHELP | OFN_EXPLORER; - if (GetOpenFileName(&OFN)) + BOOL res = GetOpenFileName(&OFN); + if (res) { - free(t_bgdir); + if (free_bgdir) + free(t_bgdir); utf8_szFile = ui_utf8_from_wstring(szFile); if( !utf8_szFile ) - return FALSE; + return false; // Make this file as the new default SetBgDir(utf8_szFile); // Display new background LoadBackgroundBitmap(); - InvalidateRect(hMain, NULL, TRUE); + InvalidateRect(hMain, NULL, true); free(utf8_szFile); - return TRUE; + return true; } - free(t_bgdir); + if (free_bgdir) + free(t_bgdir); } break; #if 0 @@ -4345,7 +4345,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) { SetHistoryFileName(filename); } - return TRUE; + return true; } case ID_OPTIONS_MAMEINFO: { @@ -4355,13 +4355,13 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) { SetMAMEInfoFileName(filename); } - return TRUE; + return true; } #endif case ID_HELP_ABOUT: DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hMain, AboutDialogProc); SetFocus(hwndList); - return TRUE; + return true; case IDOK : /* cmk -- might need to check more codes here, not sure */ @@ -4370,8 +4370,8 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) /* enter key */ if (g_in_treeview_edit) { - res = TreeView_EndEditLabelNow(hTreeView, FALSE); - return TRUE; + res = TreeView_EndEditLabelNow(hTreeView, false); + return true; } else if (have_selection) @@ -4381,7 +4381,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) case IDCANCEL : /* esc key */ if (g_in_treeview_edit) - res = TreeView_EndEditLabelNow(hTreeView, TRUE); + res = TreeView_EndEditLabelNow(hTreeView, true); break; case IDC_PLAY_GAME : @@ -4456,8 +4456,8 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) break; case ID_CONTEXT_RESET_PLAYSTATS: - ResetPlayTime( Picker_GetSelectedItem(hwndList) ); - ResetPlayCount( Picker_GetSelectedItem(hwndList) ); + ResetPlayTime(current_game); + ResetPlayCount(current_game); res = ListView_RedrawItems(hwndList, GetSelectedPick(), GetSelectedPick()); break; @@ -4478,10 +4478,10 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) printf("%X: %ls\n",g_helpInfo[i].bIsHtmlHelp, g_helpInfo[i].lpFile); if (i == 1) // get current whatsnew.txt from mamedev.org { - std::string version = std::string(GetVersionString()); // turn version string into std + string version = string(GetVersionString()); // turn version string into std version.erase(1,1); // take out the decimal point - version.erase(4, std::string::npos); // take out the date - std::string url = "http://mamedev.org/releases/whatsnew_" + version + ".txt"; // construct url + version.erase(4, string::npos); // take out the date + string url = "http://mamedev.org/releases/whatsnew_" + version + ".txt"; // construct url std::wstring stemp = s2ws(url); // convert to wide string (yeah, typical c++ mess) LPCWSTR result = stemp.c_str(); // then convert to const wchar_t* ShellExecute(hMain, TEXT("open"), result, TEXT(""), NULL, SW_SHOWNORMAL); // show web page @@ -4492,13 +4492,13 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify) ShellExecute(hMain, TEXT("open"), g_helpInfo[i].lpFile, TEXT(""), NULL, SW_SHOWNORMAL); // else // DisplayTextFile(hMain, g_helpInfo[i].lpFile); - return FALSE; + return false; } } break; } - - return FALSE; + res++; + return false; } static void LoadBackgroundBitmap() @@ -4528,15 +4528,12 @@ static void LoadBackgroundBitmap() static void ResetColumnDisplay(BOOL first_time) { - int driver_index; - if (!first_time) Picker_ResetColumnDisplay(hwndList); ResetListView(); - driver_index = GetGameNameIndex(GetDefaultGame()); - Picker_SetSelectedItem(hwndList, driver_index); + Picker_SetSelectedItem(hwndList, GetDefaultGame()); } static int GamePicker_GetItemImage(HWND hwndPicker, int nItem) @@ -4554,19 +4551,17 @@ static const TCHAR *GamePicker_GetItemString(HWND hwndPicker, int nItem, int nCo { case COLUMN_GAMES: /* Driver description */ - utf8_s = ModifyThe(driver_list::driver(nItem).description); + utf8_s = ModifyThe(driver_list::driver(nItem).type.fullname()); break; case COLUMN_ORIENTATION: utf8_s = DriverIsVertical(nItem) ? "Vertical" : "Horizontal"; break; -#ifdef SHOW_COLUMN_ROMS case COLUMN_ROMS: utf8_s = GetAuditString(GetRomAuditResults(nItem)); break; -#endif -#ifdef SHOW_COLUMN_SAMPLES + case COLUMN_SAMPLES: /* Samples */ if (DriverUsesSamples(nItem)) @@ -4574,7 +4569,7 @@ static const TCHAR *GamePicker_GetItemString(HWND hwndPicker, int nItem, int nCo else s = TEXT("-"); break; -#endif + case COLUMN_DIRECTORY: /* Driver name (directory) */ utf8_s = driver_list::driver(nItem).name; @@ -4715,7 +4710,7 @@ static void InitListView() res = ListView_SetTextBkColor(hwndList, CLR_NONE); res = ListView_SetBkColor(hwndList, CLR_NONE); - t_bgdir = ui_wstring_from_utf8(GetBgDir()); + t_bgdir = ui_wstring_from_utf8(GetBgDir().c_str()); if( !t_bgdir ) return; @@ -4726,13 +4721,15 @@ static void InitListView() CreateIcons(); - ResetColumnDisplay(TRUE); + ResetColumnDisplay(true); // Allow selection to change the default saved game - bListReady = TRUE; + bListReady = true; + res++; free(t_bgdir); } + static void AddDriverIcon(int nItem,int default_icon_index) { HICON hIcon = 0; @@ -4806,10 +4803,8 @@ static void ReloadIcons(void) ImageList_RemoveAll(hLarge); if (icon_index) - { - for (i=0;i<driver_list::total();i++) + for (i=0; i<driver_list::total(); i++) icon_index[i] = 0; // these are indices into hSmall - } for (i = 0; g_iconData[i].icon_name; i++) { @@ -4959,15 +4954,14 @@ static int GamePicker_Compare(HWND hwndPicker, int index1, int index2, int sort_ switch (sort_subitem) { case COLUMN_GAMES: - return core_stricmp(ModifyThe(driver_list::driver(index1).description), - ModifyThe(driver_list::driver(index2).description)); + return core_stricmp(ModifyThe(driver_list::driver(index1).type.fullname()), ModifyThe(driver_list::driver(index2).type.fullname())); case COLUMN_ORIENTATION: nTemp1 = DriverIsVertical(index1) ? 1 : 0; nTemp2 = DriverIsVertical(index2) ? 1 : 0; value = nTemp1 - nTemp2; break; -#ifdef SHOW_COLUMN_SAMPLES + case COLUMN_SAMPLES: nTemp1 = -1; if (DriverUsesSamples(index1)) @@ -5000,7 +4994,7 @@ static int GamePicker_Compare(HWND hwndPicker, int index1, int index2, int sort_ } value = nTemp2 - nTemp1; break; -#endif + case COLUMN_DIRECTORY: value = core_stricmp(driver_list::driver(index1).name, driver_list::driver(index2).name); break; @@ -5076,26 +5070,20 @@ int GetSelectedPick() static HICON GetSelectedPickItemIcon() { LV_ITEM lvi; - BOOL res; - lvi.iItem = GetSelectedPick(); lvi.iSubItem = 0; lvi.mask = LVIF_IMAGE; - res = ListView_GetItem(hwndList, &lvi); - + BOOL res = ListView_GetItem(hwndList, &lvi); + res++; return ImageList_GetIcon(hLarge, lvi.iImage, ILD_TRANSPARENT); } static void SetRandomPickItem() { - int nListCount; - - nListCount = ListView_GetItemCount(hwndList); + int nListCount = ListView_GetItemCount(hwndList); if (nListCount > 0) - { Picker_SetSelectedPick(hwndList, rand() % nListCount); - } } BOOL CommonFileDialog(common_file_dialog_proc cfd, char *filename, int filetype) @@ -5103,7 +5091,7 @@ BOOL CommonFileDialog(common_file_dialog_proc cfd, char *filename, int filetype) BOOL success; UINT16 i; OPENFILENAME ofn; - std::string dirname; + string dirname; TCHAR* t_filename; TCHAR t_filename_buffer[MAX_PATH] = {0, }; char *utf8_filename; @@ -5161,21 +5149,6 @@ BOOL CommonFileDialog(common_file_dialog_proc cfd, char *filename, int filetype) ofn.lpstrDefExt = TEXT("txt"); dirname = GetInpDir(); break; - case FILETYPE_CHEAT_FILE : - ofn.lpstrFilter = TEXT("cheats (*.dat)\0*.dat;\0All files (*.*)\0*.*\0"); - ofn.lpstrDefExt = TEXT("dat"); - dirname = "."; - break; - case FILETYPE_HISTORY_FILE : - ofn.lpstrFilter = TEXT("history (*.dat)\0*.dat;\0All files (*.*)\0*.*\0"); - ofn.lpstrDefExt = TEXT("dat"); - dirname = "."; - break; - case FILETYPE_MAMEINFO_FILE : - ofn.lpstrFilter = TEXT("mameinfo (*.dat)\0*.dat;\0All files (*.*)\0*.*\0"); - ofn.lpstrDefExt = TEXT("dat"); - dirname = "."; - break; } ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; @@ -5300,7 +5273,7 @@ static void MamePlayBackGame() return; } - std::string const sysname = header.get_sysname(); + string const sysname = header.get_sysname(); nGame = -1; for (int i = 0; i < driver_list::total(); i++) // find game and play it { @@ -5420,7 +5393,8 @@ static void MamePlayRecordGame() *filename = 0; nGame = Picker_GetSelectedItem(hwndList); - strcpy(filename, driver_list::driver(nGame).name); + if (nGame != -1) + strcpy(filename, driver_list::driver(nGame).name); if (CommonFileDialog(GetSaveFileName, filename, FILETYPE_INPUT_FILES)) { @@ -5451,9 +5425,11 @@ void MamePlayGame(void) play_options playopts; nGame = Picker_GetSelectedItem(hwndList); - - memset(&playopts, 0, sizeof(playopts)); - MamePlayGameWithOptions(nGame, &playopts); + if (nGame != -1) + { + memset(&playopts, 0, sizeof(playopts)); + MamePlayGameWithOptions(nGame, &playopts); + } } static void MamePlayRecordWave() @@ -5463,7 +5439,8 @@ static void MamePlayRecordWave() play_options playopts; nGame = Picker_GetSelectedItem(hwndList); - strcpy(filename, driver_list::driver(nGame).name); + if (nGame != -1) + strcpy(filename, driver_list::driver(nGame).name); if (CommonFileDialog(GetSaveFileName, filename, FILETYPE_WAVE_FILES)) { @@ -5480,7 +5457,8 @@ static void MamePlayRecordMNG() char filename[MAX_PATH] = { 0, }; nGame = Picker_GetSelectedItem(hwndList); - strcpy(filename, driver_list::driver(nGame).name); + if (nGame != -1) + strcpy(filename, driver_list::driver(nGame).name); if (CommonFileDialog(GetSaveFileName, filename, FILETYPE_MNG_FILES)) { @@ -5511,7 +5489,8 @@ static void MamePlayRecordAVI() char filename[MAX_PATH] = { 0, }; nGame = Picker_GetSelectedItem(hwndList); - strcpy(filename, driver_list::driver(nGame).name); + if (nGame != -1) + strcpy(filename, driver_list::driver(nGame).name); if (CommonFileDialog(GetSaveFileName, filename, FILETYPE_AVI_FILES)) { @@ -5547,7 +5526,7 @@ static void MamePlayGameWithOptions(int nGame, const play_options *playopts) if (GetCycleScreenshot() > 0) KillTimer(hMain, SCREENSHOT_TIMER); - in_emulation = TRUE; + in_emulation = true; dwExitCode = RunMAME(nGame, playopts); if (dwExitCode == 0) @@ -5560,7 +5539,7 @@ static void MamePlayGameWithOptions(int nGame, const play_options *playopts) ShowWindow(hMain, SW_SHOW); } - in_emulation = FALSE; + in_emulation = false; // re-sort if sorting on # of times played if (GetSortColumn() == COLUMN_PLAYED) @@ -5575,19 +5554,20 @@ static void MamePlayGameWithOptions(int nGame, const play_options *playopts) SetTimer(hMain, JOYGUI_TIMER, JOYGUI_MS, NULL); if (GetCycleScreenshot() > 0) SetTimer(hMain, SCREENSHOT_TIMER, GetCycleScreenshot()*1000, NULL); //scale to seconds + res++; } /* Toggle ScreenShot ON/OFF */ static void ToggleScreenShot(void) { - BOOL showScreenShot = GetShowScreenShot(); - - SetShowScreenShot((showScreenShot) ? FALSE : TRUE); + UINT val = GetWindowPanes() ^ 8; + BOOL show = BIT(val, 3); + SetWindowPanes(val); UpdateScreenShot(); /* Redraw list view */ - if (hBackground && showScreenShot) - InvalidateRect(hwndList, NULL, FALSE); + if (hBackground && show) + InvalidateRect(hwndList, NULL, false); } static void AdjustMetrics(void) @@ -5660,6 +5640,8 @@ static void AdjustMetrics(void) SetWindowArea(&area); SetWindowPos(hMain, 0, area.x, area.y, area.width, area.height, SWP_NOZORDER | SWP_SHOWWINDOW | SWP_NOACTIVATE); + res++; + b_res++; } int FindIconIndex(int nIconResource) @@ -5691,28 +5673,40 @@ static int GetIconForDriver(int nItem) if (DriverUsesRoms(nItem)) { int audit_result = GetRomAuditResults(nItem); - if (IsAuditResultKnown(audit_result) == FALSE) + if (audit_result == -1) return 2; -#ifdef SHOW_MISSING_ROMS_ICON + else if (IsAuditResultYes(audit_result)) iconRoms = 1; else iconRoms = 0; -#endif } // iconRoms is now either 0 (no roms), 1 (roms), or 2 (unknown) - // these are indices into icon_names, which maps into our image list, also must match IDI_WIN_NOROMS + iconRoms - // Show Red-X if the ROMs are present and flagged as NOT WORKING - if (iconRoms == 1 && DriverIsBroken(nItem)) - iconRoms = FindIconIndex(IDI_WIN_REDX); - // show clone icon if we have roms and game is working - if (iconRoms == 1 && DriverIsClone(nItem)) - iconRoms = FindIconIndex(IDI_WIN_CLONE); + /* these are indices into icon_names, which maps into our image list + * also must match IDI_WIN_NOROMS + iconRoms + */ + + if (iconRoms == 1) + { + // Show Red-X if the ROMs are present and flagged as NOT WORKING + if (DriverIsBroken(nItem)) + iconRoms = FindIconIndex(IDI_WIN_REDX); // iconRoms now = 4 + else + // Show imperfect if the ROMs are present and flagged as imperfect + if (DriverIsImperfect(nItem)) + iconRoms = FindIconIndex(IDI_WIN_IMPERFECT); // iconRoms now = 5 + else + // show clone icon if we have roms and game is working + if (DriverIsClone(nItem)) + iconRoms = FindIconIndex(IDI_WIN_CLONE); // iconRoms now = 3 + } // if we have the roms, then look for a custom per-game icon to override - if (iconRoms == 1 || iconRoms == 3) + // not 2, because this indicates F5 must be done; not 0, because this indicates roms are missing; only use 4 if user chooses it + BOOL redx = GetOverrideRedX() & (iconRoms == 4); + if (iconRoms == 1 || iconRoms == 3 || iconRoms == 5 || redx) { if (icon_index[nItem] == 0) AddDriverIcon(nItem,iconRoms); @@ -5731,7 +5725,7 @@ static BOOL HandleTreeContextMenu(HWND hWnd, WPARAM wParam, LPARAM lParam) BOOL res; if ((HWND)wParam != GetDlgItem(hWnd, IDC_TREE)) - return FALSE; + return false; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); @@ -5756,8 +5750,8 @@ static BOOL HandleTreeContextMenu(HWND hWnd, WPARAM wParam, LPARAM lParam) TrackPopupMenu(hMenu,TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,0,hWnd,NULL); DestroyMenu(hTreeMenu); - - return TRUE; + res++; + return true; } @@ -5787,7 +5781,7 @@ static BOOL HandleScreenShotContextMenu(HWND hWnd, WPARAM wParam, LPARAM lParam) POINT pt; if ((HWND)wParam != GetDlgItem(hWnd, IDC_SSPICTURE) && (HWND)wParam != GetDlgItem(hWnd, IDC_SSFRAME)) - return FALSE; + return false; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); @@ -5803,7 +5797,7 @@ static BOOL HandleScreenShotContextMenu(HWND hWnd, WPARAM wParam, LPARAM lParam) DestroyMenu(hMenuLoad); - return TRUE; + return true; } static void UpdateMenu(HMENU hMenu) @@ -5811,26 +5805,28 @@ static void UpdateMenu(HMENU hMenu) TCHAR buf[200]; MENUITEMINFO mItem; int nGame = Picker_GetSelectedItem(hwndList); + if (nGame < 0) + have_selection = 0; + LPTREEFOLDER lpFolder = GetCurrentFolder(); int i; - //const char *pParent; TCHAR* t_description; if (have_selection) { - t_description = ui_wstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).description))); + t_description = ui_wstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).type.fullname()))); if( !t_description ) return; _sntprintf(buf, ARRAY_LENGTH(buf), g_szPlayGameString, t_description); - mItem.cbSize = sizeof(mItem); - mItem.fMask = MIIM_TYPE; - mItem.fType = MFT_STRING; + mItem.cbSize = sizeof(mItem); + mItem.fMask = MIIM_TYPE; + mItem.fType = MFT_STRING; mItem.dwTypeData = buf; - mItem.cch = _tcslen(mItem.dwTypeData); + mItem.cch = _tcslen(mItem.dwTypeData); - SetMenuItemInfo(hMenu, ID_FILE_PLAY, FALSE, &mItem); + SetMenuItemInfo(hMenu, ID_FILE_PLAY, false, &mItem); EnableMenuItem(hMenu, ID_CONTEXT_SELECT_RANDOM, MF_ENABLED); @@ -5838,9 +5834,9 @@ static void UpdateMenu(HMENU hMenu) } else { - EnableMenuItem(hMenu, ID_FILE_PLAY, MF_GRAYED); - EnableMenuItem(hMenu, ID_FILE_PLAY_RECORD, MF_GRAYED); - EnableMenuItem(hMenu, ID_GAME_PROPERTIES, MF_GRAYED); + EnableMenuItem(hMenu, ID_FILE_PLAY, MF_GRAYED); + EnableMenuItem(hMenu, ID_FILE_PLAY_RECORD, MF_GRAYED); + EnableMenuItem(hMenu, ID_GAME_PROPERTIES, MF_GRAYED); EnableMenuItem(hMenu, ID_CONTEXT_SELECT_RANDOM, MF_GRAYED); } @@ -5863,13 +5859,9 @@ static void UpdateMenu(HMENU hMenu) } //pParent = GetFolderNameByID(lpFolder->m_nParent+1); - if (lpFolder->m_dwFlags & F_INIEDIT) - EnableMenuItem(hMenu,ID_FOLDER_PROPERTIES,MF_ENABLED); - else - EnableMenuItem(hMenu,ID_FOLDER_PROPERTIES,MF_GRAYED); + EnableMenuItem(hMenu, ID_FOLDER_PROPERTIES, (lpFolder->m_dwFlags & F_INIEDIT) ? MF_ENABLED : MF_GRAYED); - CheckMenuRadioItem(hMenu, ID_VIEW_TAB_SCREENSHOT, ID_VIEW_TAB_HISTORY, - ID_VIEW_TAB_SCREENSHOT + TabView_GetCurrentTab(hTabCtrl), MF_BYCOMMAND); + CheckMenuRadioItem(hMenu, ID_VIEW_TAB_ARTWORK, ID_VIEW_TAB_HISTORY, ID_VIEW_TAB_ARTWORK + TabView_GetCurrentTab(hTabCtrl), MF_BYCOMMAND); // set whether we're showing the tab control or not if (bShowTabCtrl) @@ -5877,20 +5869,19 @@ static void UpdateMenu(HMENU hMenu) else CheckMenuItem(hMenu,ID_VIEW_PAGETAB,MF_BYCOMMAND | MF_UNCHECKED); - for (i=0;i<MAX_TAB_TYPES;i++) { // disable menu items for tabs we're not currently showing if (GetShowTab(i)) - EnableMenuItem(hMenu,ID_VIEW_TAB_SCREENSHOT + i,MF_BYCOMMAND | MF_ENABLED); + EnableMenuItem(hMenu,ID_VIEW_TAB_ARTWORK + i,MF_BYCOMMAND | MF_ENABLED); else - EnableMenuItem(hMenu,ID_VIEW_TAB_SCREENSHOT + i,MF_BYCOMMAND | MF_GRAYED); + EnableMenuItem(hMenu,ID_VIEW_TAB_ARTWORK + i,MF_BYCOMMAND | MF_GRAYED); // check toggle menu items if (GetShowTab(i)) - CheckMenuItem(hMenu, ID_TOGGLE_TAB_SCREENSHOT + i,MF_BYCOMMAND | MF_CHECKED); + CheckMenuItem(hMenu, ID_TOGGLE_TAB_ARTWORK + i,MF_BYCOMMAND | MF_CHECKED); else - CheckMenuItem(hMenu, ID_TOGGLE_TAB_SCREENSHOT + i,MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(hMenu, ID_TOGGLE_TAB_ARTWORK + i,MF_BYCOMMAND | MF_UNCHECKED); } for (i=0;i<MAX_FOLDERS;i++) @@ -5900,78 +5891,79 @@ static void UpdateMenu(HMENU hMenu) else CheckMenuItem(hMenu,ID_CONTEXT_SHOW_FOLDER_START + i,MF_BYCOMMAND | MF_UNCHECKED); } - } void InitTreeContextMenu(HMENU hTreeMenu) { - MENUITEMINFO mii; - HMENU hMenu; - int i; extern const FOLDERDATA g_folderData[]; + MENUITEMINFO mii; ZeroMemory(&mii,sizeof(mii)); mii.cbSize = sizeof(mii); - mii.wID = -1; mii.fMask = MIIM_SUBMENU | MIIM_ID; - hMenu = GetSubMenu(hTreeMenu, 0); + HMENU hMenu = GetSubMenu(hTreeMenu, 0); - if (GetMenuItemInfo(hMenu,3,TRUE,&mii) == FALSE) + if (GetMenuItemInfo(hMenu,3,true,&mii) == false) { - dprintf("can't find show folders context menu\n"); + printf("can't find show folders context menu\n");fflush(stdout); return; } if (mii.hSubMenu == NULL) { - dprintf("can't find submenu for show folders context menu\n"); + printf("can't find submenu for show folders context menu\n");fflush(stdout); return; } hMenu = mii.hSubMenu; - for (i=0;g_folderData[i].m_lpTitle;i++) + for (int i=0; g_folderData[i].m_lpTitle; i++) { - TCHAR* t_title = ui_wstring_from_utf8(g_folderData[i].m_lpTitle); - if( !t_title ) - return; - - mii.fMask = MIIM_TYPE | MIIM_ID; - mii.fType = MFT_STRING; - mii.dwTypeData = t_title; - mii.cch = _tcslen(mii.dwTypeData); - mii.wID = ID_CONTEXT_SHOW_FOLDER_START + g_folderData[i].m_nFolderId; + if (!g_folderData[i].m_process) + { + TCHAR* t_title = ui_wstring_from_utf8(g_folderData[i].m_lpTitle); + if( !t_title ) + return; + mii.fMask = MIIM_TYPE | MIIM_ID; + mii.fType = MFT_STRING; + mii.dwTypeData = t_title; + mii.cch = _tcslen(mii.dwTypeData); + mii.wID = ID_CONTEXT_SHOW_FOLDER_START + g_folderData[i].m_nFolderId; - // menu in resources has one empty item (needed for the submenu to setup properly) - // so overwrite this one, append after - if (i == 0) - SetMenuItemInfo(hMenu,ID_CONTEXT_SHOW_FOLDER_START,FALSE,&mii); - else - InsertMenuItem(hMenu,i,FALSE,&mii); + // menu in resources has one empty item (needed for the submenu to setup properly) + // so overwrite this one, append after + if (i == 0) + SetMenuItemInfo(hMenu,ID_CONTEXT_SHOW_FOLDER_START,false,&mii); + else + InsertMenuItem(hMenu,i,false,&mii); - free(t_title); + free(t_title); + } } - } + void InitBodyContextMenu(HMENU hBodyContextMenu) { - LPTREEFOLDER lpFolder; + int current_game = Picker_GetSelectedItem(hwndList); + if (current_game < 0) + return; + TCHAR tmp[30]; MENUITEMINFO mii; ZeroMemory(&mii,sizeof(mii)); mii.cbSize = sizeof(mii); - if (GetMenuItemInfo(hBodyContextMenu,ID_FOLDER_SOURCEPROPERTIES,FALSE,&mii) == FALSE) + if (GetMenuItemInfo(hBodyContextMenu,ID_FOLDER_SOURCEPROPERTIES,false,&mii) == false) { dprintf("can't find show folders context menu\n"); return; } - lpFolder = GetFolderByName(FOLDER_SOURCE, GetDriverFilename(Picker_GetSelectedItem(hwndList)) ); - _sntprintf(tmp,ARRAY_LENGTH(tmp),TEXT("Properties for %s"),lpFolder->m_lptTitle ); + + _sntprintf(tmp,ARRAY_LENGTH(tmp),TEXT("Properties for %s"), ui_wstring_from_utf8(GetDriverFilename(current_game) )); mii.fMask = MIIM_TYPE | MIIM_ID; mii.fType = MFT_STRING; mii.dwTypeData = tmp; @@ -5981,9 +5973,8 @@ void InitBodyContextMenu(HMENU hBodyContextMenu) // menu in resources has one default item // so overwrite this one - SetMenuItemInfo(hBodyContextMenu,ID_FOLDER_SOURCEPROPERTIES,FALSE,&mii); - if( ! DriverIsVector(Picker_GetSelectedItem(hwndList) ) ) - EnableMenuItem(hBodyContextMenu, ID_FOLDER_VECTORPROPERTIES, MF_GRAYED); + SetMenuItemInfo(hBodyContextMenu,ID_FOLDER_SOURCEPROPERTIES,false,&mii); + EnableMenuItem(hBodyContextMenu, ID_FOLDER_VECTORPROPERTIES, DriverIsVector(current_game) ? MF_ENABLED : MF_GRAYED); } @@ -5991,14 +5982,14 @@ void ToggleShowFolder(int folder) { int current_id = GetCurrentFolderID(); - SetWindowRedraw(hwndList,FALSE); + SetWindowRedraw(hwndList,false); SetShowFolder(folder,!GetShowFolder(folder)); ResetTreeViewFolders(); SelectTreeViewFolder(current_id); - SetWindowRedraw(hwndList,TRUE); + SetWindowRedraw(hwndList,true); } static LRESULT CALLBACK HistoryWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -6010,12 +6001,12 @@ static LRESULT CALLBACK HistoryWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR case WM_MOUSEMOVE: { if (MouseHasBeenMoved()) - ShowCursor(TRUE); + ShowCursor(true); break; } case WM_ERASEBKGND: - return TRUE; + return true; case WM_PAINT: { POINT p = { 0, 0 }; @@ -6024,7 +6015,7 @@ static LRESULT CALLBACK HistoryWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR MapWindowPoints(hWnd,hTreeView,&p,1); PaintBackgroundImage(hWnd, NULL, p.x, p.y); /* to ensure our parent procedure repaints the whole client area */ - InvalidateRect(hWnd, NULL, FALSE); + InvalidateRect(hWnd, NULL, false); break; } } @@ -6039,7 +6030,7 @@ static LRESULT CALLBACK PictureFrameWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, case WM_MOUSEMOVE: { if (MouseHasBeenMoved()) - ShowCursor(TRUE); + ShowCursor(true); break; } @@ -6057,8 +6048,8 @@ static LRESULT CALLBACK PictureFrameWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, // no more no man's land, the Cursor changes when Edit control is left, should be enough feedback if (have_history && ( ( (TabView_GetCurrentTab(hTabCtrl) == TAB_HISTORY) || - (TabView_GetCurrentTab(hTabCtrl) == GetHistoryTab() && GetShowTab(TAB_HISTORY) == FALSE) || - (TAB_ALL == GetHistoryTab() && GetShowTab(TAB_HISTORY) == FALSE) ) && + (TabView_GetCurrentTab(hTabCtrl) == GetHistoryTab() && GetShowTab(TAB_HISTORY) == false) || + (TAB_ALL == GetHistoryTab() && GetShowTab(TAB_HISTORY) == false) ) && // (rect.top - 6) < pt.y && pt.y < (rect.bottom + 6) ) ) PtInRect( &rect, pt ) ) ) @@ -6073,7 +6064,7 @@ static LRESULT CALLBACK PictureFrameWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, break; case WM_CONTEXTMENU: if ( HandleScreenShotContextMenu(hWnd, wParam, lParam)) - return FALSE; + return false; break; } @@ -6082,7 +6073,7 @@ static LRESULT CALLBACK PictureFrameWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, switch (uMsg) { case WM_ERASEBKGND : - return TRUE; + return true; case WM_PAINT : { RECT rect,nodraw_rect; @@ -6120,7 +6111,7 @@ static LRESULT CALLBACK PictureFrameWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, DeleteObject(region); /* to ensure our parent procedure repaints the whole client area */ - InvalidateRect(hWnd, NULL, FALSE); + InvalidateRect(hWnd, NULL, false); break; } @@ -6134,7 +6125,7 @@ static LRESULT CALLBACK PictureWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR switch (uMsg) { case WM_ERASEBKGND : - return TRUE; + return true; case WM_PAINT : { PAINTSTRUCT ps; @@ -6208,7 +6199,7 @@ static LRESULT CALLBACK PictureWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR EndPaint(hWnd,&ps); - return TRUE; + return true; } } @@ -6217,7 +6208,8 @@ static LRESULT CALLBACK PictureWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR static void RemoveCurrentGameCustomFolder(void) { - RemoveGameCustomFolder(Picker_GetSelectedItem(hwndList)); + if (Picker_GetSelectedItem(hwndList) >= 0) + RemoveGameCustomFolder(Picker_GetSelectedItem(hwndList)); } static void RemoveGameCustomFolder(int driver_index) @@ -6258,38 +6250,34 @@ static void RemoveGameCustomFolder(int driver_index) static void BeginListViewDrag(NM_LISTVIEW *pnmv) { - LV_ITEM lvi; - POINT pt; - BOOL res; - + LV_ITEM lvi; lvi.iItem = pnmv->iItem; lvi.mask = LVIF_PARAM; - res = ListView_GetItem(hwndList, &lvi); + BOOL res = ListView_GetItem(hwndList, &lvi); + res++; game_dragged = lvi.lParam; + POINT pt; pt.x = 0; pt.y = 0; - /* Tell the list view control to create an image to use - for dragging. */ - himl_drag = ListView_CreateDragImage(hwndList,pnmv->iItem,&pt); + /* Tell the list view control to create an image to use for dragging. */ + himl_drag = ListView_CreateDragImage(hwndList,pnmv->iItem,&pt); - /* Start the drag operation. */ - ImageList_BeginDrag(himl_drag, 0, 0, 0); + /* Start the drag operation. */ + ImageList_BeginDrag(himl_drag, 0, 0, 0); pt = pnmv->ptAction; ClientToScreen(hwndList,&pt); ImageList_DragEnter(GetDesktopWindow(),pt.x,pt.y); - /* Hide the mouse cursor, and direct mouse input to the - parent window. */ - SetCapture(hMain); + /* Hide the mouse cursor, and direct mouse input to the parent window. */ + SetCapture(hMain); prev_drag_drop_target = NULL; - g_listview_dragging = TRUE; - + g_listview_dragging = true; } static void MouseMoveListViewDrag(POINTS p) @@ -6313,15 +6301,16 @@ static void MouseMoveListViewDrag(POINTS p) if (htiTarget != prev_drag_drop_target) { - ImageList_DragShowNolock(FALSE); + ImageList_DragShowNolock(false); if (htiTarget) res = TreeView_SelectDropTarget(hTreeView,htiTarget); else res = TreeView_SelectDropTarget(hTreeView,NULL); - ImageList_DragShowNolock(TRUE); + ImageList_DragShowNolock(true); prev_drag_drop_target = htiTarget; } + res++; } static void ButtonUpListViewDrag(POINTS p) @@ -6330,7 +6319,6 @@ static void ButtonUpListViewDrag(POINTS p) HTREEITEM htiTarget; TV_HITTESTINFO tvht; TVITEM tvi; - BOOL res; ReleaseCapture(); @@ -6338,9 +6326,10 @@ static void ButtonUpListViewDrag(POINTS p) ImageList_EndDrag(); ImageList_Destroy(himl_drag); - res = TreeView_SelectDropTarget(hTreeView,NULL); + BOOL res = TreeView_SelectDropTarget(hTreeView,NULL); + res++; - g_listview_dragging = FALSE; + g_listview_dragging = false; /* see where the game was dragged */ @@ -6378,7 +6367,6 @@ static void ButtonUpListViewDrag(POINTS p) return; } - tvi.lParam = 0; tvi.mask = TVIF_PARAM | TVIF_HANDLE; tvi.hItem = htiTarget; @@ -6388,21 +6376,18 @@ static void ButtonUpListViewDrag(POINTS p) LPTREEFOLDER folder = (LPTREEFOLDER)tvi.lParam; AddToCustomFolder(folder,game_dragged); } - } static LPTREEFOLDER GetSelectedFolder(void) { - HTREEITEM htree; - TVITEM tvi; - BOOL res; - - htree = TreeView_GetSelection(hTreeView); + HTREEITEM htree = TreeView_GetSelection(hTreeView); if(htree) { + TVITEM tvi; tvi.hItem = htree; tvi.mask = TVIF_PARAM; - res = TreeView_GetItem(hTreeView,&tvi); + BOOL res = TreeView_GetItem(hTreeView,&tvi); + res++; return (LPTREEFOLDER)tvi.lParam; } return NULL; @@ -6410,22 +6395,17 @@ static LPTREEFOLDER GetSelectedFolder(void) static HICON GetSelectedFolderIcon(void) { - HTREEITEM htree; - TVITEM tvi; - HIMAGELIST hSmall_icon; - LPTREEFOLDER folder; - BOOL res; - - htree = TreeView_GetSelection(hTreeView); + HTREEITEM htree = TreeView_GetSelection(hTreeView); if (htree) { + TVITEM tvi; tvi.hItem = htree; tvi.mask = TVIF_PARAM; - res = TreeView_GetItem(hTreeView,&tvi); - - folder = (LPTREEFOLDER)tvi.lParam; + BOOL res = TreeView_GetItem(hTreeView,&tvi); + res++; + //LPTREEFOLDER folder = (LPTREEFOLDER)tvi.lParam; //hSmall_icon = TreeView_GetImageList(hTreeView,(int)tvi.iImage); - hSmall_icon = NULL; + HIMAGELIST hSmall_icon = NULL; return ImageList_GetIcon(hSmall_icon, tvi.iImage, ILD_TRANSPARENT); } return NULL; @@ -6437,8 +6417,9 @@ void UpdateListView(void) BOOL res; if( (GetViewMode() == VIEW_GROUPED) || (GetViewMode() == VIEW_DETAILS ) ) - res = ListView_RedrawItems(hwndList,ListView_GetTopIndex(hwndList), - ListView_GetTopIndex(hwndList)+ ListView_GetCountPerPage(hwndList) ); + res = ListView_RedrawItems(hwndList,ListView_GetTopIndex(hwndList), ListView_GetTopIndex(hwndList)+ ListView_GetCountPerPage(hwndList) ); + + res++; } static void CalculateBestScreenShotRect(HWND hWnd, RECT *pRect, BOOL restrict_height) @@ -6451,7 +6432,7 @@ static void CalculateBestScreenShotRect(HWND hWnd, RECT *pRect, BOOL restrict_he int x, y; int rWidth, rHeight; double scale; - BOOL bReduce = FALSE; + BOOL bReduce = false; GetClientRect(hWnd, &rect); @@ -6473,7 +6454,7 @@ static void CalculateBestScreenShotRect(HWND hWnd, RECT *pRect, BOOL restrict_he rHeight = (rect.bottom - rect.top); /* Limit the screen shot to max height of 264 */ - if (restrict_height == TRUE && rHeight > 264) + if (restrict_height == true && rHeight > 264) { rect.bottom = rect.top + 264; rHeight = 264; @@ -6486,7 +6467,7 @@ static void CalculateBestScreenShotRect(HWND hWnd, RECT *pRect, BOOL restrict_he rect.bottom -= 10; rWidth -= 10; rHeight -= 10; - bReduce = TRUE; + bReduce = true; /* Try to scale it properly */ /* assumes square pixels, doesn't consider aspect ratio */ if (x > y) @@ -6517,7 +6498,7 @@ static void CalculateBestScreenShotRect(HWND hWnd, RECT *pRect, BOOL restrict_he rect.bottom -= 10; rWidth -= 10; rHeight -= 10; - bReduce = TRUE; + bReduce = true; // Try to scale it properly // assumes square pixels, doesn't consider aspect ratio if (x < y) @@ -6600,7 +6581,7 @@ static void SwitchFullScreenMode(void) SetMenu(hMain, LoadMenu(hInst,MAKEINTRESOURCE(IDR_UI_MENU))); // Refresh the checkmarks - CheckMenuItem(GetMenu(hMain), ID_VIEW_FOLDERS, GetShowFolderList() ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(GetMenu(hMain), ID_VIEW_FOLDERS, BIT(GetWindowPanes(), 0) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(GetMenu(hMain), ID_VIEW_TOOLBARS, GetShowToolBar() ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(GetMenu(hMain), ID_VIEW_STATUS, GetShowStatusBar() ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(GetMenu(hMain), ID_VIEW_PAGETAB, GetShowTabCtrl() ? MF_CHECKED : MF_UNCHECKED); @@ -6619,7 +6600,7 @@ static void SwitchFullScreenMode(void) else ShowWindow(hMain, SW_RESTORE); - SetRunFullScreen(FALSE); + SetRunFullScreen(false); } else { @@ -6644,7 +6625,7 @@ static void SwitchFullScreenMode(void) ShowWindow(hMain, SW_MAXIMIZE); - SetRunFullScreen(TRUE); + SetRunFullScreen(true); } } |