mirror of https://github.com/stella-emu/stella.git
Adding new browsing Listcontrol!
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@79 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
9fbb171a56
commit
efcb6fa969
|
@ -100,10 +100,6 @@ SOURCE=.\AudioStream.cxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\BrowseForFolder.cxx
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CRegBinding.cpp
|
SOURCE=.\CRegBinding.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -140,6 +136,10 @@ SOURCE=.\DirectXWindow.cxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\GameList.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\GlobalData.cxx
|
SOURCE=.\GlobalData.cxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -148,10 +148,6 @@ SOURCE=.\HyperLink.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\ListData.cxx
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\MainFrm.cpp
|
SOURCE=.\MainFrm.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -184,10 +180,6 @@ SOURCE=.\AudioStream.hxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\BrowseForFolder.hxx
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CRegBinding.h
|
SOURCE=.\CRegBinding.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -220,6 +212,10 @@ SOURCE=.\DirectXWindow.hxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\GameList.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\GlobalData.hxx
|
SOURCE=.\GlobalData.hxx
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -228,10 +224,6 @@ SOURCE=.\HyperLink.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\ListData.hxx
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\MainFrm.h
|
SOURCE=.\MainFrm.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -260,15 +252,19 @@ SOURCE=.\Timer.hxx
|
||||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\res\Cyberstella.ico
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\res\Cyberstella.rc2
|
SOURCE=.\res\Cyberstella.rc2
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\res\CyberstellaDoc.ico
|
SOURCE=.\Dir.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\res\Dir.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\res\Stella.ico
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,15 @@ END
|
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Icon
|
||||||
|
//
|
||||||
|
|
||||||
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
|
// remains consistent on all systems.
|
||||||
|
IDI_FOLDER ICON DISCARDABLE "res\\DIR.ICO"
|
||||||
#endif // German (Germany) resources
|
#endif // German (Germany) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -78,8 +87,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
|
||||||
// Icon with lowest ID value placed first to ensure application icon
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
// remains consistent on all systems.
|
// remains consistent on all systems.
|
||||||
IDR_MAINFRAME ICON DISCARDABLE "STELLA.ICO"
|
IDR_MAINFRAME ICON DISCARDABLE "res\\STELLA.ICO"
|
||||||
IDR_CYBERSTYPE ICON DISCARDABLE "res\\CyberstellaDoc.ico"
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -158,70 +166,62 @@ END
|
||||||
|
|
||||||
IDD_CYBERSTELLA_FORM DIALOGEX 0, 0, 409, 169
|
IDD_CYBERSTELLA_FORM DIALOGEX 0, 0, 409, 169
|
||||||
STYLE WS_CHILD
|
STYLE WS_CHILD
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "&Files found in:",-1,"Static",SS_LEFTNOWORDWRAP |
|
CONTROL "&Files found in:",-1,"Static",SS_LEFTNOWORDWRAP |
|
||||||
WS_GROUP,7,7,44,8
|
WS_GROUP,7,7,44,8
|
||||||
CONTROL "List1",IDC_ROMLIST,"SysListView32",LVS_REPORT |
|
CONTROL "List1",IDC_ROMLIST,"SysListView32",LVS_REPORT |
|
||||||
LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE |
|
LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER |
|
||||||
WS_BORDER | WS_TABSTOP,7,19,395,143,WS_EX_STATICEDGE
|
WS_TABSTOP,7,19,395,143,WS_EX_CLIENTEDGE
|
||||||
RTEXT "<status>",IDC_ROMCOUNT,322,7,80,8,SS_NOPREFIX
|
RTEXT "<status>",IDC_ROMCOUNT,322,7,80,8,SS_NOPREFIX
|
||||||
CONTROL "Static",IDC_ROMPATH,"Static",SS_LEFTNOWORDWRAP |
|
CONTROL "Static",IDC_ROMPATH,"Static",SS_LEFTNOWORDWRAP |
|
||||||
SS_NOPREFIX | WS_GROUP,57,7,254,8
|
SS_NOPREFIX | WS_GROUP,57,7,254,8
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 390, 176
|
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 390, 133
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Information"
|
CAPTION "Information"
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "You must own legal copies of all ROM images you are using. Neither Jeff Miller nor the rest of the Stella team can tell you where to find ROM images so DON'T ASK. All requests will either be deleted or sent to the appropriate authorities.",
|
LTEXT "You must own legal copies of all ROM images you are using. Neither Manuel Polik nor the rest of the Stella team can tell you where to find ROM images so DON'T ASK. All requests will either be deleted or sent to the appropriate authorities.",
|
||||||
-1,7,7,376,18,SS_NOPREFIX
|
-1,7,27,376,18,SS_NOPREFIX
|
||||||
LTEXT "If you have a question or a problem, please try one of these contacts:",
|
LTEXT "If you have a question or a problem with Cyberstella, please try one of these contacts:",
|
||||||
-1,7,93,376,8,SS_NOPREFIX
|
-1,7,58,376,8,SS_NOPREFIX
|
||||||
LTEXT "Jeff Miller:",-1,7,109,32,8,SS_NOPREFIX
|
LTEXT "Manuel Polik:",-1,7,76,62,8,SS_NOPREFIX
|
||||||
LTEXT "miller@zipcon.net",IDC_EMAIL_JEFFMILL,73,109,56,8,
|
LTEXT "cybergoth@nexgo.de",IDC_EMAIL_JEFFMILL,73,76,103,8,
|
||||||
SS_NOPREFIX | SS_NOTIFY
|
SS_NOPREFIX | SS_NOTIFY
|
||||||
LTEXT "http://www.emuunlim.com/stellax/",IDC_WEB_JEFFMILL,178,
|
LTEXT "http://www.emuunlim.com/stellax/",IDC_WEB_JEFFMILL,178,
|
||||||
109,110,8,SS_NOPREFIX | SS_NOTIFY
|
76,110,8,SS_NOPREFIX | SS_NOTIFY
|
||||||
LTEXT "Stella dev team:",-1,7,121,52,8,SS_NOPREFIX
|
LTEXT "Stella dev team:",-1,7,88,52,8,SS_NOPREFIX
|
||||||
LTEXT "stella@csc.ncsu.edu",IDC_EMAIL_STELLA,73,121,67,8,
|
LTEXT "stella@csc.ncsu.edu",IDC_EMAIL_STELLA,73,88,67,8,
|
||||||
SS_NOPREFIX | SS_NOTIFY
|
SS_NOPREFIX | SS_NOTIFY
|
||||||
LTEXT "http://stella.atari.org",IDC_WEB_STELLA,178,121,65,8,
|
LTEXT "http://stella.atari.org",IDC_WEB_STELLA,178,88,65,8,
|
||||||
SS_NOPREFIX | SS_NOTIFY
|
SS_NOPREFIX | SS_NOTIFY
|
||||||
LTEXT "StellaX is free software. It may not be sold or offered as part of a collection for sale without permission from Jeff Miller. When distributing StellaX, the original distribution (the .zip file) must not be altered.",
|
LTEXT "Cyberstella is free software. It may not be sold or offered as part of a collection for sale without permission from Manuel Polik. When distributing Cyberstella, the original distribution (the .zip file) must not be altered.",
|
||||||
-1,7,32,376,19,SS_NOPREFIX
|
-1,7,7,376,19,SS_NOPREFIX
|
||||||
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,81,376,1
|
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,50,375,1
|
||||||
LTEXT "TIPS: F12 will create a screen shot of the current game screen. Open up stella.ini in notepad to see configurable options.",
|
PUSHBUTTON "&Continue",IDC_CONTINUE,136,111,118,14
|
||||||
-1,7,56,376,18
|
|
||||||
PUSHBUTTON "&Continue",IDC_CONTINUE,136,144,118,14
|
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_CONFIG_PAGE DIALOG DISCARDABLE 0, 0, 390, 149
|
IDD_CONFIG_PAGE DIALOG DISCARDABLE 0, 0, 390, 112
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Cyberstella Configuration"
|
CAPTION "Cyberstella Configuration"
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "&ROM (.bin) file path:",-1,7,10,64,8
|
LTEXT "Mouse should emulate &paddle:",-1,7,10,97,8
|
||||||
EDITTEXT IDC_ROMPATH,82,7,246,14,ES_AUTOHSCROLL
|
COMBOBOX IDC_PADDLE,109,7,48,82,CBS_DROPDOWNLIST | WS_VSCROLL |
|
||||||
PUSHBUTTON "&Browse...",IDC_BROWSE,333,7,50,14
|
|
||||||
LTEXT "Set this to the path where your .bin rom files are located.",
|
|
||||||
-1,7,25,376,8
|
|
||||||
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,39,376,1
|
|
||||||
LTEXT "Mouse should emulate &paddle:",-1,7,49,97,8
|
|
||||||
COMBOBOX IDC_PADDLE,109,46,48,82,CBS_DROPDOWNLIST | WS_VSCROLL |
|
|
||||||
WS_TABSTOP
|
WS_TABSTOP
|
||||||
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,66,374,1
|
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,27,374,1
|
||||||
CONTROL "&Auto select video mode",IDC_AUTO_SELECT_VIDEOMODE,
|
CONTROL "&Auto select video mode",IDC_AUTO_SELECT_VIDEOMODE,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,73,90,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,90,10
|
||||||
LTEXT "If this is not checked, then a standard video mode (640x480) will be used. Otherwise, StellaX will use the video mode which it believes will work best. You should only uncheck this if you are having video problems while running StellaX.",
|
LTEXT "If this is not checked, then a standard video mode (640x480) will be used. Otherwise, Cyberstella will use the video mode which it believes will work best. You should only uncheck this if you are having video problems while running Cyberstella.",
|
||||||
-1,7,84,376,18
|
-1,7,45,376,18
|
||||||
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,108,373,1
|
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,69,373,1
|
||||||
CONTROL "Disable &Sound",IDC_SOUND,"Button",BS_AUTOCHECKBOX |
|
CONTROL "Disable &Sound",IDC_SOUND,"Button",BS_AUTOCHECKBOX |
|
||||||
WS_TABSTOP,7,116,62,10
|
WS_TABSTOP,7,77,62,10
|
||||||
CONTROL "Disable &Joysticks",IDC_JOYSTICK,"Button",
|
CONTROL "Disable &Joysticks",IDC_JOYSTICK,"Button",
|
||||||
BS_AUTOCHECKBOX | WS_TABSTOP,7,130,70,10
|
BS_AUTOCHECKBOX | WS_TABSTOP,7,96,70,10
|
||||||
PUSHBUTTON "&Continue",IDC_CONTINUE,265,128,118,14
|
PUSHBUTTON "&Continue",IDC_CONTINUE,265,92,118,14
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
@ -289,7 +289,7 @@ BEGIN
|
||||||
LEFTMARGIN, 7
|
LEFTMARGIN, 7
|
||||||
RIGHTMARGIN, 383
|
RIGHTMARGIN, 383
|
||||||
TOPMARGIN, 7
|
TOPMARGIN, 7
|
||||||
BOTTOMMARGIN, 169
|
BOTTOMMARGIN, 126
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_CONFIG_PAGE, DIALOG
|
IDD_CONFIG_PAGE, DIALOG
|
||||||
|
@ -297,7 +297,7 @@ BEGIN
|
||||||
LEFTMARGIN, 7
|
LEFTMARGIN, 7
|
||||||
RIGHTMARGIN, 383
|
RIGHTMARGIN, 383
|
||||||
TOPMARGIN, 7
|
TOPMARGIN, 7
|
||||||
BOTTOMMARGIN, 142
|
BOTTOMMARGIN, 106
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
@ -445,11 +445,11 @@ BEGIN
|
||||||
IDS_DSCSBFAILED "IDirectSound::CreateSoundBuffer failed"
|
IDS_DSCSBFAILED "IDirectSound::CreateSoundBuffer failed"
|
||||||
IDS_DSSCLFAILED "IDirectSound::SetCooperativeLevel failed"
|
IDS_DSSCLFAILED "IDirectSound::SetCooperativeLevel failed"
|
||||||
IDS_FILEFILTER "Stella Files (*.bin)|*.bin|All Files (*.*)|*.*||"
|
IDS_FILEFILTER "Stella Files (*.bin)|*.bin|All Files (*.*)|*.*||"
|
||||||
IDS_FILENAME "Filename"
|
|
||||||
IDS_MANUFACTURER "Manufacturer"
|
IDS_MANUFACTURER "Manufacturer"
|
||||||
IDS_MIKE """I've heard some folks discussing the possibility of writing an 2600 emulator in a high level language - forget it, not possible."" -- Mike Livesay on rec.games.video.classic"
|
IDS_MIKE """I've heard some folks discussing the possibility of writing an 2600 emulator in a high level language - forget it, not possible."" -- Mike Livesay on rec.games.video.classic"
|
||||||
IDS_NAME "Name"
|
IDS_NAME "Name"
|
||||||
IDS_NODIRECTDRAW "DirectDraw does not appear to be installed on this system!"
|
IDS_NODIRECTDRAW "DirectDraw does not appear to be installed on this system!"
|
||||||
|
IDS_FILE "File"
|
||||||
IDS_RARITY "Rarity"
|
IDS_RARITY "Rarity"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,6 @@
|
||||||
#include "CyberstellaDoc.h"
|
#include "CyberstellaDoc.h"
|
||||||
#include "CyberstellaView.h"
|
#include "CyberstellaView.h"
|
||||||
#include "StellaConfig.h"
|
#include "StellaConfig.h"
|
||||||
#include "MD5.hxx"
|
|
||||||
#include "PropsSet.hxx"
|
|
||||||
#include "Console.hxx"
|
#include "Console.hxx"
|
||||||
#include "SoundWin32.hxx"
|
#include "SoundWin32.hxx"
|
||||||
|
|
||||||
|
@ -22,7 +20,7 @@ static char THIS_FILE[] = __FILE__;
|
||||||
// Undefining USE_FS will use the (untested) windowed mode
|
// Undefining USE_FS will use the (untested) windowed mode
|
||||||
//
|
//
|
||||||
|
|
||||||
//#define USE_FS
|
#define USE_FS
|
||||||
|
|
||||||
#ifdef USE_FS
|
#ifdef USE_FS
|
||||||
#include "DirectXFullScreen.hxx"
|
#include "DirectXFullScreen.hxx"
|
||||||
|
@ -42,6 +40,7 @@ BEGIN_MESSAGE_MAP(CCyberstellaView, CFormView)
|
||||||
//{{AFX_MSG_MAP(CCyberstellaView)
|
//{{AFX_MSG_MAP(CCyberstellaView)
|
||||||
ON_BN_CLICKED(IDC_CONFIG, OnConfig)
|
ON_BN_CLICKED(IDC_CONFIG, OnConfig)
|
||||||
ON_BN_CLICKED(IDC_PLAY, OnPlay)
|
ON_BN_CLICKED(IDC_PLAY, OnPlay)
|
||||||
|
ON_WM_DESTROY()
|
||||||
//}}AFX_MSG_MAP
|
//}}AFX_MSG_MAP
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
@ -88,89 +87,25 @@ void CCyberstellaView::OnInitialUpdate()
|
||||||
GetParentFrame()->RecalcLayout();
|
GetParentFrame()->RecalcLayout();
|
||||||
ResizeParentToFit();
|
ResizeParentToFit();
|
||||||
|
|
||||||
DWORD dwRet;
|
// Init ListControl, parse stella.pro
|
||||||
|
Initialize();
|
||||||
|
|
||||||
HWND hwnd = *this;
|
|
||||||
|
|
||||||
dwRet = Initialize();
|
|
||||||
if ( dwRet != ERROR_SUCCESS )
|
|
||||||
{
|
|
||||||
MessageBoxFromWinError( dwRet, _T("CStellaX::Initialize") );
|
|
||||||
AfxGetMainWnd()->SendMessage(WM_CLOSE, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int nMaxString = 256;
|
|
||||||
TCHAR psz[nMaxString + 1];
|
|
||||||
|
|
||||||
// LVS_EX_ONECLICKACTIVATE was causing a/vs in kernel32
|
|
||||||
|
|
||||||
::SendMessage( m_List,
|
|
||||||
LVM_SETEXTENDEDLISTVIEWSTYLE,
|
|
||||||
0,
|
|
||||||
LVS_EX_FULLROWSELECT );
|
|
||||||
|
|
||||||
RECT rc;
|
|
||||||
::GetClientRect( m_List, &rc );
|
|
||||||
|
|
||||||
LONG lTotalWidth = rc.right-rc.left - GetSystemMetrics(SM_CXVSCROLL);
|
|
||||||
int cx = lTotalWidth / CListData::GetColumnCount();
|
|
||||||
|
|
||||||
for (int i = 0; i < CListData::GetColumnCount(); ++i)
|
|
||||||
{
|
|
||||||
|
|
||||||
LoadString(GetModuleHandle(NULL),
|
|
||||||
CListData::GetColumnNameIdForColumn( i ),
|
|
||||||
psz, nMaxString );
|
|
||||||
|
|
||||||
LV_COLUMN lvc;
|
|
||||||
lvc.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
|
|
||||||
lvc.fmt = LVCFMT_LEFT;
|
|
||||||
lvc.cx = cx;
|
|
||||||
lvc.pszText = psz;
|
|
||||||
ListView_InsertColumn( m_List, i, &lvc );
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD dwError = PopulateRomList();
|
|
||||||
if ( dwError != ERROR_SUCCESS )
|
|
||||||
{
|
|
||||||
MessageBoxFromWinError( dwError, _T("PopulateRomList") );
|
|
||||||
AfxGetMainWnd()->SendMessage(WM_CLOSE, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if items added, select first item and enable play button
|
|
||||||
|
|
||||||
int nCount = ListView_GetItemCount( m_List );
|
|
||||||
if (nCount != 0)
|
|
||||||
{
|
|
||||||
m_List.SortItems(ListViewCompareFunc, 0);
|
|
||||||
ListView_SetItemState( m_List, 0, LVIS_SELECTED | LVIS_FOCUSED,
|
|
||||||
LVIS_SELECTED | LVIS_FOCUSED );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
::EnableWindow(::GetDlgItem( hwnd, IDC_PLAY), FALSE );
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Show status text
|
// Show status text
|
||||||
//
|
CString status;
|
||||||
|
status.Format(IDS_STATUSTEXT, m_List.GetItemCount());
|
||||||
TCHAR pszStatus[256 + 1];
|
SetDlgItemText(IDC_ROMCOUNT,status);
|
||||||
LoadString(GetModuleHandle(NULL), IDS_STATUSTEXT, pszStatus, 256);
|
|
||||||
wsprintf( psz, pszStatus, nCount );
|
|
||||||
SetDlgItemText(IDC_ROMCOUNT, psz );
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Show rom path
|
// Show rom path
|
||||||
//
|
//
|
||||||
|
|
||||||
SetDlgItemText(IDC_ROMPATH, m_pGlobalData->romDir);
|
//ToDo: SetDlgItemText(IDC_ROMPATH, m_pGlobalData->romDir);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set default button
|
// Set default button
|
||||||
//
|
//
|
||||||
|
|
||||||
::SendMessage( hwnd, DM_SETDEFID, IDC_PLAY, 0 );
|
::SendMessage( *this, DM_SETDEFID, IDC_PLAY, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -194,356 +129,40 @@ CCyberstellaDoc* CCyberstellaView::GetDocument() // non-debug version is inline
|
||||||
}
|
}
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
////////////////////////////
|
|
||||||
// Listview compare function
|
|
||||||
int CALLBACK CCyberstellaView::ListViewCompareFunc(LPARAM lParam1, LPARAM lParam2,
|
|
||||||
LPARAM lParamSort)
|
|
||||||
{
|
|
||||||
CCyberstellaView* pThis = reinterpret_cast<CCyberstellaView*>( lParamSort );
|
|
||||||
|
|
||||||
//
|
|
||||||
// I assume that the metadata for column 0 is always available,
|
|
||||||
// while other column metadata requires a call to ReadRomData
|
|
||||||
//
|
|
||||||
|
|
||||||
int nSortCol = lParamSort;
|
|
||||||
|
|
||||||
CListData* pItem1 = reinterpret_cast<CListData*>( lParam1 );
|
|
||||||
if ( ! pItem1->IsPopulated() && nSortCol != 0 )
|
|
||||||
{
|
|
||||||
pThis->ReadRomData( pItem1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
CListData* pItem2 = reinterpret_cast<CListData*>( lParam2 );
|
|
||||||
if ( ! pItem2->IsPopulated() && nSortCol != 0 )
|
|
||||||
{
|
|
||||||
pThis->ReadRomData( pItem2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
LPCTSTR pszItem1 = pItem1->GetTextForColumn( nSortCol );
|
|
||||||
LPCTSTR pszItem2 = pItem2->GetTextForColumn( nSortCol );
|
|
||||||
|
|
||||||
//
|
|
||||||
// put blank items last
|
|
||||||
//
|
|
||||||
|
|
||||||
if ( pszItem1 == NULL || pszItem1[0] == _T('\0') )
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( pszItem2 == NULL || pszItem2[0] == _T('\0') )
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Compare the specified column.
|
|
||||||
//
|
|
||||||
|
|
||||||
return lstrcmpi( pszItem1, pszItem2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCyberstellaView::OnConfig()
|
void CCyberstellaView::OnConfig()
|
||||||
{
|
{
|
||||||
StellaConfig dlg(m_pGlobalData);
|
StellaConfig dlg(m_pGlobalData);
|
||||||
dlg.DoModal();
|
dlg.DoModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD CCyberstellaView::PopulateRomList()
|
|
||||||
{
|
|
||||||
DWORD dwRet;
|
|
||||||
|
|
||||||
ClearList();
|
|
||||||
|
|
||||||
TCHAR pszPath[ MAX_PATH ];
|
|
||||||
lstrcpy( pszPath, m_pGlobalData->romDir);
|
|
||||||
lstrcat( pszPath, _T("\\*.bin") );
|
|
||||||
|
|
||||||
WIN32_FIND_DATA ffd;
|
|
||||||
HANDLE hFind = FindFirstFile( pszPath, &ffd );
|
|
||||||
|
|
||||||
ListView_SetItemCount(m_List, 100);
|
|
||||||
|
|
||||||
int iItem = 0;
|
|
||||||
|
|
||||||
BOOL fDone = (hFind == INVALID_HANDLE_VALUE);
|
|
||||||
while (!fDone)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// File metadata will be read in ReadRomData()
|
|
||||||
//
|
|
||||||
|
|
||||||
CListData* pListData = new CListData;
|
|
||||||
if( pListData == NULL )
|
|
||||||
{
|
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
dwRet = pListData->Initialize();
|
|
||||||
if ( dwRet != ERROR_SUCCESS )
|
|
||||||
{
|
|
||||||
return dwRet;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! pListData->m_strFileName.Set( ffd.cFileName ) )
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
LV_ITEM lvi;
|
|
||||||
lvi.mask = LVIF_TEXT | LVIF_PARAM;
|
|
||||||
lvi.iItem = iItem++;
|
|
||||||
lvi.iSubItem = 0;
|
|
||||||
lvi.pszText = ffd.cFileName;
|
|
||||||
lvi.lParam = (LPARAM)pListData;
|
|
||||||
m_List.InsertItem (&lvi);
|
|
||||||
|
|
||||||
//TODO: Display the Rest
|
|
||||||
/*int nItem = ListView_InsertItem(m_List, &lvi);
|
|
||||||
ASSERT( nItem != -1 );
|
|
||||||
ListView_SetItemText(m_List, nItem,
|
|
||||||
CListData::FILENAME_COLUMN, LPSTR_TEXTCALLBACK );
|
|
||||||
ListView_SetItemText(m_List, nItem,
|
|
||||||
CListData::MANUFACTURER_COLUMN, LPSTR_TEXTCALLBACK);
|
|
||||||
ListView_SetItemText(m_List, nItem,
|
|
||||||
CListData::RARITY_COLUMN, LPSTR_TEXTCALLBACK );*/
|
|
||||||
|
|
||||||
// go to the next rom file
|
|
||||||
fDone = !FindNextFile(hFind, &ffd);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( hFind != INVALID_HANDLE_VALUE )
|
|
||||||
{
|
|
||||||
VERIFY( ::FindClose( hFind ) );
|
|
||||||
}
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCyberstellaView::ClearList()
|
|
||||||
{
|
|
||||||
int nCount = ListView_GetItemCount(m_List);
|
|
||||||
|
|
||||||
for (int i = 0; i < nCount; ++i)
|
|
||||||
{
|
|
||||||
ListView_DeleteItem(m_List,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
ListView_DeleteAllItems(m_List);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD CCyberstellaView::ReadRomData(CListData* pListData) const
|
|
||||||
{
|
|
||||||
// TODO: Move this method to ListData class (?)
|
|
||||||
if ( pListData == NULL )
|
|
||||||
{
|
|
||||||
ASSERT( FALSE );
|
|
||||||
return ERROR_BAD_ARGUMENTS;
|
|
||||||
}
|
|
||||||
|
|
||||||
// attempt to read the rom file
|
|
||||||
TCHAR pszPath[MAX_PATH + 1];
|
|
||||||
lstrcpy( pszPath, m_pGlobalData->romDir);
|
|
||||||
lstrcat( pszPath, _T("\\") );
|
|
||||||
lstrcat( pszPath, pListData->GetTextForColumn( CListData::FILENAME_COLUMN ) );
|
|
||||||
|
|
||||||
HANDLE hFile;
|
|
||||||
|
|
||||||
hFile = CreateFile( pszPath,
|
|
||||||
GENERIC_READ,
|
|
||||||
FILE_SHARE_READ,
|
|
||||||
NULL,
|
|
||||||
OPEN_EXISTING,
|
|
||||||
FILE_ATTRIBUTE_NORMAL,
|
|
||||||
NULL );
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD dwFileSize = ::GetFileSize( hFile, NULL );
|
|
||||||
|
|
||||||
BYTE* pImage = new BYTE[dwFileSize];
|
|
||||||
if ( pImage == NULL )
|
|
||||||
{
|
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD dwRead;
|
|
||||||
|
|
||||||
if ( ::ReadFile( hFile, pImage, dwFileSize, &dwRead, NULL ) )
|
|
||||||
{
|
|
||||||
// Read the file, now check the md5
|
|
||||||
|
|
||||||
std::string md5 = MD5( pImage, dwFileSize );
|
|
||||||
|
|
||||||
// search through the properties set for this MD5
|
|
||||||
|
|
||||||
PropertiesSet& propertiesSet = GetPropertiesSet();
|
|
||||||
Properties properties;
|
|
||||||
propertiesSet.getMD5(md5, properties);
|
|
||||||
|
|
||||||
if ( ! pListData->m_strManufacturer.Set(
|
|
||||||
properties.get("Cartridge.Manufacturer").c_str() ) )
|
|
||||||
{
|
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! pListData->m_strName.Set(
|
|
||||||
properties.get("Cartridge.Name").c_str() ) )
|
|
||||||
{
|
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! pListData->m_strRarity.Set(
|
|
||||||
properties.get("Cartridge.Rarity").c_str() ) )
|
|
||||||
{
|
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! pListData->m_strNote.Set(
|
|
||||||
properties.get("Cartridge.Note").c_str() ) )
|
|
||||||
{
|
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] pImage;
|
|
||||||
|
|
||||||
VERIFY( ::CloseHandle( hFile ) );
|
|
||||||
|
|
||||||
pListData->m_fPopulated = TRUE;
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCyberstellaView::OnPlay()
|
void CCyberstellaView::OnPlay()
|
||||||
{
|
{
|
||||||
CListData* pListData;
|
EnableWindow(FALSE);
|
||||||
int nItem;
|
|
||||||
|
|
||||||
nItem = (int)::SendMessage( m_List,
|
CString fileName = m_List.getCurrentFile();
|
||||||
LVM_GETNEXTITEM,
|
|
||||||
(WPARAM)-1,
|
|
||||||
MAKELPARAM( LVNI_SELECTED, 0 ) );
|
|
||||||
ASSERT( nItem != -1 );
|
|
||||||
if ( nItem == -1 )
|
|
||||||
{
|
|
||||||
::MessageBox( GetModuleHandle(NULL),
|
|
||||||
*this,
|
|
||||||
IDS_NO_ITEM_SELECTED );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pListData = (CListData*)m_List.GetItemData(nItem);
|
// Safety Bail Out
|
||||||
|
if(fileName.GetLength() <= 0) return;
|
||||||
TCHAR pszPathName[ MAX_PATH + 1 ];
|
|
||||||
lstrcpy( pszPathName, m_pGlobalData->romDir);
|
|
||||||
lstrcat( pszPathName, _T("\\") );
|
|
||||||
lstrcat( pszPathName,
|
|
||||||
pListData->GetTextForColumn( CListData::FILENAME_COLUMN ) );
|
|
||||||
|
|
||||||
// Play the game!
|
|
||||||
|
|
||||||
::EnableWindow(*this, FALSE );
|
|
||||||
|
|
||||||
PlayROM( *this,
|
|
||||||
pszPathName,
|
|
||||||
pListData->GetTextForColumn( CListData::NAME_COLUMN ),
|
|
||||||
m_pGlobalData);
|
|
||||||
|
|
||||||
::EnableWindow( *this, TRUE );
|
|
||||||
|
|
||||||
// Set focus back to the rom list
|
|
||||||
|
|
||||||
::SetFocus(m_List);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Toggles pausing of the emulator
|
|
||||||
void CCyberstellaView::togglePause()
|
|
||||||
{
|
|
||||||
m_bIsPause = !m_bIsPause;
|
|
||||||
|
|
||||||
//TODO: theConsole->mediaSource().pause(m_bIsPause);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD CCyberstellaView::Initialize()
|
|
||||||
{
|
|
||||||
TRACE( "CStellaXMain::SetupProperties" );
|
|
||||||
|
|
||||||
// Create a properties set for us to use
|
|
||||||
|
|
||||||
if ( m_pPropertiesSet )
|
|
||||||
{
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_pPropertiesSet = new PropertiesSet();
|
|
||||||
if ( m_pPropertiesSet == NULL )
|
|
||||||
{
|
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to load the file stella.pro file
|
|
||||||
string filename( "stella.pro" );
|
|
||||||
|
|
||||||
// See if we can open the file and load properties from it
|
|
||||||
ifstream stream(filename.c_str());
|
|
||||||
if(stream)
|
|
||||||
{
|
|
||||||
// File was opened so load properties from it
|
|
||||||
stream.close();
|
|
||||||
m_pPropertiesSet->load(filename, &Console::defaultProperties());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_pPropertiesSet->load("", &Console::defaultProperties());
|
|
||||||
}
|
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
|
||||||
LPCTSTR pszPathName,
|
|
||||||
LPCTSTR pszFriendlyName,
|
|
||||||
CGlobalData* rGlobalData)
|
|
||||||
{
|
|
||||||
UNUSED_ALWAYS( hwnd );
|
|
||||||
|
|
||||||
HRESULT hr = S_OK;
|
|
||||||
|
|
||||||
TRACE("CStellaXMain::PlayROM");
|
|
||||||
|
|
||||||
//
|
|
||||||
// show wait cursor while loading
|
|
||||||
//
|
|
||||||
|
|
||||||
HCURSOR hcur = ::SetCursor( ::LoadCursor( NULL, IDC_WAIT ) );
|
|
||||||
|
|
||||||
//
|
|
||||||
// setup objects used here
|
|
||||||
//
|
|
||||||
|
|
||||||
BYTE* pImage = NULL;
|
|
||||||
LPCTSTR pszFileName = NULL;
|
|
||||||
|
|
||||||
#ifdef USE_FS
|
#ifdef USE_FS
|
||||||
CDirectXFullScreen* pwnd = NULL;
|
CDirectXFullScreen* pwnd = NULL;
|
||||||
#else
|
#else
|
||||||
CDirectXWindow* pwnd = NULL;
|
CDirectXWindow* pwnd = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
BYTE* pImage = NULL;
|
||||||
|
LPCTSTR pszFileName = NULL;
|
||||||
Console* pConsole = NULL;
|
Console* pConsole = NULL;
|
||||||
Sound* pSound = NULL;
|
Sound* pSound = NULL;
|
||||||
Event rEvent;
|
Event rEvent;
|
||||||
|
|
||||||
//
|
// show wait cursor while loading
|
||||||
// Load the rom file
|
HCURSOR hcur = ::SetCursor(::LoadCursor(NULL, IDC_WAIT));
|
||||||
//
|
|
||||||
|
|
||||||
|
// Load the rom file
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
DWORD dwImageSize;
|
DWORD dwImageSize;
|
||||||
|
hFile = ::CreateFile( fileName,
|
||||||
hFile = ::CreateFile( pszPathName,
|
|
||||||
GENERIC_READ,
|
GENERIC_READ,
|
||||||
FILE_SHARE_READ,
|
FILE_SHARE_READ,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -552,8 +171,6 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
NULL );
|
NULL );
|
||||||
if (hFile == INVALID_HANDLE_VALUE)
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
HINSTANCE hInstance = (HINSTANCE)::GetWindowLong( hwnd, GWL_HINSTANCE );
|
|
||||||
|
|
||||||
DWORD dwLastError = ::GetLastError();
|
DWORD dwLastError = ::GetLastError();
|
||||||
|
|
||||||
TCHAR pszCurrentDirectory[ MAX_PATH + 1 ];
|
TCHAR pszCurrentDirectory[ MAX_PATH + 1 ];
|
||||||
|
@ -561,7 +178,7 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
|
|
||||||
// ::MessageBoxFromGetLastError( pszPathName );
|
// ::MessageBoxFromGetLastError( pszPathName );
|
||||||
TCHAR pszFormat[ 1024 ];
|
TCHAR pszFormat[ 1024 ];
|
||||||
LoadString( hInstance,
|
LoadString(GetModuleHandle(NULL),
|
||||||
IDS_ROM_LOAD_FAILED,
|
IDS_ROM_LOAD_FAILED,
|
||||||
pszFormat, 1023 );
|
pszFormat, 1023 );
|
||||||
|
|
||||||
|
@ -580,18 +197,17 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
wsprintf( pszError,
|
wsprintf( pszError,
|
||||||
pszFormat,
|
pszFormat,
|
||||||
pszCurrentDirectory,
|
pszCurrentDirectory,
|
||||||
pszPathName,
|
fileName,
|
||||||
dwLastError,
|
dwLastError,
|
||||||
pszLastError );
|
pszLastError );
|
||||||
|
|
||||||
::MessageBox( hwnd,
|
::MessageBox( *this,
|
||||||
pszError,
|
pszError,
|
||||||
_T("Error"),
|
_T("Error"),
|
||||||
MB_OK | MB_ICONEXCLAMATION );
|
MB_OK | MB_ICONEXCLAMATION );
|
||||||
|
|
||||||
::LocalFree( pszLastError );
|
::LocalFree( pszLastError );
|
||||||
|
|
||||||
hr = HRESULT_FROM_WIN32( ::GetLastError() );
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -600,7 +216,6 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
pImage = new BYTE[dwImageSize + 1];
|
pImage = new BYTE[dwImageSize + 1];
|
||||||
if ( pImage == NULL )
|
if ( pImage == NULL )
|
||||||
{
|
{
|
||||||
hr = E_OUTOFMEMORY;
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -609,9 +224,8 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
{
|
{
|
||||||
VERIFY( ::CloseHandle( hFile ) );
|
VERIFY( ::CloseHandle( hFile ) );
|
||||||
|
|
||||||
MessageBoxFromGetLastError( pszPathName );
|
MessageBoxFromGetLastError(fileName);
|
||||||
|
|
||||||
hr = HRESULT_FROM_WIN32( ::GetLastError() );
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -622,7 +236,7 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
// (Will be initialized once we have a window handle below)
|
// (Will be initialized once we have a window handle below)
|
||||||
//
|
//
|
||||||
|
|
||||||
if (rGlobalData->bNoSound)
|
if (m_pGlobalData->bNoSound)
|
||||||
{
|
{
|
||||||
TRACE("Creating Sound driver");
|
TRACE("Creating Sound driver");
|
||||||
pSound = new Sound;
|
pSound = new Sound;
|
||||||
|
@ -634,7 +248,6 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
}
|
}
|
||||||
if ( pSound == NULL )
|
if ( pSound == NULL )
|
||||||
{
|
{
|
||||||
hr = E_OUTOFMEMORY;
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,14 +255,14 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
// get just the filename
|
// get just the filename
|
||||||
//
|
//
|
||||||
|
|
||||||
pszFileName = _tcsrchr( pszPathName, _T('\\') );
|
pszFileName = _tcsrchr( fileName, _T('\\') );
|
||||||
if ( pszFileName )
|
if ( pszFileName )
|
||||||
{
|
{
|
||||||
++pszFileName;
|
++pszFileName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pszFileName = pszPathName;
|
pszFileName = fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -664,36 +277,36 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
*pSound );
|
*pSound );
|
||||||
if ( pConsole == NULL )
|
if ( pConsole == NULL )
|
||||||
{
|
{
|
||||||
hr = E_OUTOFMEMORY;
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
|
||||||
::MessageBox(rGlobalData->instance,
|
::MessageBox(GetModuleHandle(NULL),
|
||||||
NULL, IDS_CANTSTARTCONSOLE);
|
NULL, IDS_CANTSTARTCONSOLE);
|
||||||
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_FS
|
#ifdef USE_FS
|
||||||
pwnd = new CDirectXFullScreen( rGlobalData,
|
pwnd = new CDirectXFullScreen( m_pGlobalData,
|
||||||
pConsole,
|
pConsole,
|
||||||
rEvent );
|
rEvent );
|
||||||
#else
|
#else
|
||||||
pwnd = new CDirectXWindow( rGlobalData,
|
pwnd = new CDirectXWindow( m_pGlobalData,
|
||||||
pConsole,
|
pConsole,
|
||||||
rEvent );
|
rEvent );
|
||||||
#endif
|
#endif
|
||||||
if ( pwnd == NULL )
|
if ( pwnd == NULL )
|
||||||
{
|
{
|
||||||
hr = E_OUTOFMEMORY;
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
#ifdef USE_FS
|
#ifdef USE_FS
|
||||||
if (rGlobalData->bAutoSelectVideoMode)
|
if (m_pGlobalData->bAutoSelectVideoMode)
|
||||||
{
|
{
|
||||||
hr = pwnd->Initialize( );
|
hr = pwnd->Initialize( );
|
||||||
}
|
}
|
||||||
|
@ -706,7 +319,7 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
hr = pwnd->Initialize( FORCED_VIDEO_CX, FORCED_VIDEO_CY );
|
hr = pwnd->Initialize( FORCED_VIDEO_CX, FORCED_VIDEO_CY );
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
hr = pwnd->Initialize( hwnd, pszFriendlyName );
|
hr = pwnd->Initialize(*this, m_List.getCurrentName());
|
||||||
#endif
|
#endif
|
||||||
if ( FAILED(hr) )
|
if ( FAILED(hr) )
|
||||||
{
|
{
|
||||||
|
@ -714,7 +327,7 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rGlobalData->bNoSound)
|
if (!m_pGlobalData->bNoSound)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// 060499: Pass pwnd->GetHWND() in instead of hwnd as some systems
|
// 060499: Pass pwnd->GetHWND() in instead of hwnd as some systems
|
||||||
|
@ -736,11 +349,11 @@ HRESULT CCyberstellaView::PlayROM(HWND hwnd,
|
||||||
::SetCursor( hcur );
|
::SetCursor( hcur );
|
||||||
hcur = NULL;
|
hcur = NULL;
|
||||||
|
|
||||||
::ShowWindow( hwnd, SW_HIDE );
|
::ShowWindow( *this, SW_HIDE );
|
||||||
|
|
||||||
(void)pwnd->Run();
|
(void)pwnd->Run();
|
||||||
|
|
||||||
::ShowWindow( hwnd, SW_SHOW );
|
::ShowWindow( *this, SW_SHOW );
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
|
@ -755,5 +368,69 @@ exit:
|
||||||
delete pSound;
|
delete pSound;
|
||||||
delete pImage;
|
delete pImage;
|
||||||
|
|
||||||
return hr;
|
EnableWindow(TRUE);
|
||||||
}
|
|
||||||
|
// Set focus back to the rom list
|
||||||
|
m_List.SetFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggles pausing of the emulator
|
||||||
|
void CCyberstellaView::togglePause()
|
||||||
|
{
|
||||||
|
m_bIsPause = !m_bIsPause;
|
||||||
|
|
||||||
|
//TODO: theConsole->mediaSource().pause(m_bIsPause);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCyberstellaView::Initialize()
|
||||||
|
{
|
||||||
|
// Create a properties set for us to use
|
||||||
|
m_pPropertiesSet = new PropertiesSet();
|
||||||
|
|
||||||
|
// Set up the image list.
|
||||||
|
HICON hFolder, hAtari;
|
||||||
|
|
||||||
|
m_imglist.Create ( 16, 16, ILC_COLOR16 | ILC_MASK, 4, 1 );
|
||||||
|
|
||||||
|
hFolder = reinterpret_cast<HICON>(
|
||||||
|
::LoadImage ( AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_FOLDER),
|
||||||
|
IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR ));
|
||||||
|
hAtari = reinterpret_cast<HICON>(
|
||||||
|
::LoadImage ( AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME),
|
||||||
|
IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR ));
|
||||||
|
|
||||||
|
m_imglist.Add (hFolder);
|
||||||
|
m_imglist.Add (hAtari);
|
||||||
|
|
||||||
|
m_List.SetImageList (&m_imglist, LVSIL_SMALL);
|
||||||
|
|
||||||
|
// Init ListCtrl
|
||||||
|
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
||||||
|
m_List.insertColumns();
|
||||||
|
m_List.setPropertiesSet(m_pPropertiesSet);
|
||||||
|
|
||||||
|
// Try to load the file stella.pro file
|
||||||
|
string filename( "stella.pro" );
|
||||||
|
|
||||||
|
// See if we can open the file and load properties from it
|
||||||
|
ifstream stream(filename.c_str());
|
||||||
|
if(stream)
|
||||||
|
{
|
||||||
|
// File was opened so load properties from it
|
||||||
|
stream.close();
|
||||||
|
m_pPropertiesSet->load(filename, &Console::defaultProperties());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_pPropertiesSet->load("", &Console::defaultProperties());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill our game list
|
||||||
|
m_List.populateRomList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCyberstellaView::OnDestroy()
|
||||||
|
{
|
||||||
|
CFormView::OnDestroy();
|
||||||
|
m_List.deleteItemsAndProperties();
|
||||||
|
}
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
#endif // _MSC_VER > 1000
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
#include "GlobalData.hxx"
|
#include "GlobalData.hxx"
|
||||||
#include "ListData.hxx"
|
|
||||||
#include "PropsSet.hxx"
|
#include "PropsSet.hxx"
|
||||||
|
#include "GameList.h"
|
||||||
|
|
||||||
class CCyberstellaView : public CFormView
|
class CCyberstellaView : public CFormView
|
||||||
{
|
{
|
||||||
|
@ -22,13 +22,14 @@ protected: // create from serialization only
|
||||||
public:
|
public:
|
||||||
//{{AFX_DATA(CCyberstellaView)
|
//{{AFX_DATA(CCyberstellaView)
|
||||||
enum { IDD = IDD_CYBERSTELLA_FORM };
|
enum { IDD = IDD_CYBERSTELLA_FORM };
|
||||||
CListCtrl m_List;
|
GameList m_List;
|
||||||
//}}AFX_DATA
|
//}}AFX_DATA
|
||||||
|
|
||||||
// Attributes
|
// Attributes
|
||||||
public:
|
public:
|
||||||
CCyberstellaDoc* GetDocument();
|
CCyberstellaDoc* GetDocument();
|
||||||
CGlobalData* m_pGlobalData;
|
CGlobalData* m_pGlobalData;
|
||||||
|
CImageList m_imglist;
|
||||||
|
|
||||||
// Operations
|
// Operations
|
||||||
public:
|
public:
|
||||||
|
@ -58,21 +59,14 @@ protected:
|
||||||
//{{AFX_MSG(CCyberstellaView)
|
//{{AFX_MSG(CCyberstellaView)
|
||||||
afx_msg void OnConfig();
|
afx_msg void OnConfig();
|
||||||
afx_msg void OnPlay();
|
afx_msg void OnPlay();
|
||||||
|
afx_msg void OnDestroy();
|
||||||
//}}AFX_MSG
|
//}}AFX_MSG
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// methods
|
// methods
|
||||||
PropertiesSet& GetPropertiesSet() const {return *m_pPropertiesSet;}
|
|
||||||
static int CALLBACK ListViewCompareFunc( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort );
|
|
||||||
DWORD PopulateRomList();
|
|
||||||
void ClearList();
|
|
||||||
void togglePause();
|
void togglePause();
|
||||||
DWORD ReadRomData(CListData* pListData) const;
|
void Initialize();
|
||||||
DWORD Initialize();
|
|
||||||
HRESULT PlayROM( HWND hwnd, LPCTSTR ctszPathName,
|
|
||||||
LPCTSTR pszFriendlyName,
|
|
||||||
CGlobalData* rGlobalData );
|
|
||||||
// members
|
// members
|
||||||
PropertiesSet* m_pPropertiesSet;
|
PropertiesSet* m_pPropertiesSet;
|
||||||
bool m_bIsPause;
|
bool m_bIsPause;
|
||||||
|
|
|
@ -11,7 +11,6 @@ CGlobalData::CGlobalData(HINSTANCE hInstance)
|
||||||
,bIsModified(FALSE)
|
,bIsModified(FALSE)
|
||||||
,rs("GlobalData")
|
,rs("GlobalData")
|
||||||
{
|
{
|
||||||
rs.Bind(romDir, "rom dir", "ROMS");
|
|
||||||
rs.Bind(desiredFrameRate, "desired frame rate", 60);
|
rs.Bind(desiredFrameRate, "desired frame rate", 60);
|
||||||
rs.Bind(bShowFPS, "Show FPS", false);
|
rs.Bind(bShowFPS, "Show FPS", false);
|
||||||
rs.Bind(bNoSound, "No Sound", false);
|
rs.Bind(bNoSound, "No Sound", false);
|
||||||
|
|
|
@ -21,7 +21,6 @@ public:
|
||||||
Event::Type PaddleFireEvent( void ) const;
|
Event::Type PaddleFireEvent( void ) const;
|
||||||
|
|
||||||
// Data Members in Registry
|
// Data Members in Registry
|
||||||
CString romDir;
|
|
||||||
int iPaddleMode;
|
int iPaddleMode;
|
||||||
BOOL bNoSound;
|
BOOL bNoSound;
|
||||||
BOOL bJoystickIsDisabled;
|
BOOL bJoystickIsDisabled;
|
||||||
|
|
|
@ -103,4 +103,4 @@ void CMainFrame::setStatusText(CString text)
|
||||||
m_wndStatusBar.SetWindowText(text);
|
m_wndStatusBar.SetWindowText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
|
@ -1 +1,18 @@
|
||||||
Cyberstella V1.0 by Manuel Polik
|
Cyberstella V1.2 by Manuel Polik
|
||||||
|
|
||||||
|
Currently Open Todos:
|
||||||
|
|
||||||
|
Urgent:
|
||||||
|
- Make Listcontrol react on ENTER
|
||||||
|
- Update Displays when list changes
|
||||||
|
|
||||||
|
Later:
|
||||||
|
- More Columns / Advanced sorting
|
||||||
|
- Clean OnPlay Routine
|
||||||
|
- Make whole screen resizable
|
||||||
|
- Check other versions command line params
|
||||||
|
- Check other versions keyboard mapping
|
||||||
|
- Add Screenshots - F12
|
||||||
|
- Add Pause - F3
|
||||||
|
- Add Fullscreen / Windowed mode -F4
|
||||||
|
- Check Direct Draw implementation
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
#include "pch.hxx"
|
#include "pch.hxx"
|
||||||
#include "Cyberstella.h"
|
#include "Cyberstella.h"
|
||||||
#include "StellaConfig.h"
|
#include "StellaConfig.h"
|
||||||
#include "BrowseForFolder.hxx"
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#define new DEBUG_NEW
|
#define new DEBUG_NEW
|
||||||
|
@ -38,7 +37,6 @@ void StellaConfig::DoDataExchange(CDataExchange* pDX)
|
||||||
BEGIN_MESSAGE_MAP(StellaConfig, CDialog)
|
BEGIN_MESSAGE_MAP(StellaConfig, CDialog)
|
||||||
//{{AFX_MSG_MAP(StellaConfig)
|
//{{AFX_MSG_MAP(StellaConfig)
|
||||||
ON_WM_CLOSE()
|
ON_WM_CLOSE()
|
||||||
ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
|
|
||||||
ON_BN_CLICKED(IDC_CONTINUE, OnContinue)
|
ON_BN_CLICKED(IDC_CONTINUE, OnContinue)
|
||||||
//}}AFX_MSG_MAP
|
//}}AFX_MSG_MAP
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
@ -52,10 +50,6 @@ BOOL StellaConfig::OnInitDialog()
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// Set up ROMPATH
|
|
||||||
((CEdit*)GetDlgItem(IDC_ROMPATH))->SetLimitText(MAX_PATH);
|
|
||||||
((CEdit*)GetDlgItem(IDC_ROMPATH))->SetWindowText(m_pGlobalData->romDir);
|
|
||||||
|
|
||||||
// Set up PADDLE
|
// Set up PADDLE
|
||||||
CString paddle = "Paddle%d";
|
CString paddle = "Paddle%d";
|
||||||
for (i=0; i<4; i++)
|
for (i=0; i<4; i++)
|
||||||
|
@ -93,7 +87,6 @@ BOOL StellaConfig::DestroyWindow()
|
||||||
void StellaConfig::retrieveData()
|
void StellaConfig::retrieveData()
|
||||||
{
|
{
|
||||||
// Apply changes
|
// Apply changes
|
||||||
((CEdit*)GetDlgItem(IDC_ROMPATH))->GetWindowText(m_pGlobalData->romDir);
|
|
||||||
m_pGlobalData->iPaddleMode = ((CComboBox*)GetDlgItem(IDC_PADDLE))->GetCurSel();
|
m_pGlobalData->iPaddleMode = ((CComboBox*)GetDlgItem(IDC_PADDLE))->GetCurSel();
|
||||||
m_pGlobalData->bNoSound = ((CButton*)GetDlgItem(IDC_SOUND))->GetCheck();
|
m_pGlobalData->bNoSound = ((CButton*)GetDlgItem(IDC_SOUND))->GetCheck();
|
||||||
m_pGlobalData->bAutoSelectVideoMode = ((CButton*)GetDlgItem(IDC_AUTO_SELECT_VIDEOMODE))->GetCheck();
|
m_pGlobalData->bAutoSelectVideoMode = ((CButton*)GetDlgItem(IDC_AUTO_SELECT_VIDEOMODE))->GetCheck();
|
||||||
|
@ -103,18 +96,6 @@ void StellaConfig::retrieveData()
|
||||||
m_pGlobalData->bIsModified = true;
|
m_pGlobalData->bIsModified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StellaConfig::OnBrowse()
|
|
||||||
{
|
|
||||||
CBrowseForFolder bff;
|
|
||||||
bff.SetFlags(BIF_RETURNONLYFSDIRS);
|
|
||||||
if (bff.SelectFolder())
|
|
||||||
{
|
|
||||||
((CEdit*)GetDlgItem(IDC_ROMPATH))->SetWindowText(bff.GetSelectedFolder());
|
|
||||||
}
|
|
||||||
// Set Focus to Continue Button
|
|
||||||
((CWnd*)GetDlgItem(IDC_CONTINUE))->SetFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
void StellaConfig::OnContinue()
|
void StellaConfig::OnContinue()
|
||||||
{
|
{
|
||||||
EndDialog(1);
|
EndDialog(1);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#define IDD_CONFIG_PAGE 108
|
#define IDD_CONFIG_PAGE 108
|
||||||
#define IDR_MAINFRAME 128
|
#define IDR_MAINFRAME 128
|
||||||
#define IDR_CYBERSTYPE 129
|
#define IDR_CYBERSTYPE 129
|
||||||
|
#define IDI_FOLDER 133
|
||||||
#define IDS_ALREADYRUNNING 200
|
#define IDS_ALREADYRUNNING 200
|
||||||
#define IDS_BADARGUMENT 201
|
#define IDS_BADARGUMENT 201
|
||||||
#define IDS_CW_FAILED 208
|
#define IDS_CW_FAILED 208
|
||||||
|
@ -22,6 +23,7 @@
|
||||||
#define IDS_MIKE 279
|
#define IDS_MIKE 279
|
||||||
#define IDS_NAME 280
|
#define IDS_NAME 280
|
||||||
#define IDS_NODIRECTDRAW 281
|
#define IDS_NODIRECTDRAW 281
|
||||||
|
#define IDS_FILE 282
|
||||||
#define IDS_RARITY 284
|
#define IDS_RARITY 284
|
||||||
#define IDS_STATUSTEXT 289
|
#define IDS_STATUSTEXT 289
|
||||||
#define IDS_STELLA 290
|
#define IDS_STELLA 290
|
||||||
|
@ -58,7 +60,7 @@
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_3D_CONTROLS 1
|
#define _APS_3D_CONTROLS 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 131
|
#define _APS_NEXT_RESOURCE_VALUE 134
|
||||||
#define _APS_NEXT_COMMAND_VALUE 32775
|
#define _APS_NEXT_COMMAND_VALUE 32775
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1005
|
#define _APS_NEXT_CONTROL_VALUE 1005
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
|
Loading…
Reference in New Issue