2009-07-28 21:32:10 +00:00
// Copyright (C) 2003 Dolphin Project.
2008-12-08 05:30:24 +00:00
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
# include "MemcardManager.h"
2008-12-12 07:14:37 +00:00
# include "Common.h"
2008-12-08 05:30:24 +00:00
# include "wx/mstream.h"
2009-03-01 07:15:10 +00:00
2009-02-23 18:08:03 +00:00
# define ARROWS slot ? _T("") : ARROW[slot], slot ? ARROW[slot] : _T("")
2009-02-22 03:23:48 +00:00
2008-12-08 05:30:24 +00:00
const u8 hdr [ ] = {
0x42 , 0x4D ,
0x38 , 0x30 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 ,
0x36 , 0x00 , 0x00 , 0x00 ,
0x28 , 0x00 , 0x00 , 0x00 ,
0x20 , 0x00 , 0x00 , 0x00 , //W
0x20 , 0x00 , 0x00 , 0x00 , //H
0x01 , 0x00 ,
0x20 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 ,
0x02 , 0x30 , 0x00 , 0x00 , //data size
0x12 , 0x0B , 0x00 , 0x00 ,
0x12 , 0x0B , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00
} ;
wxBitmap wxBitmapFromMemoryRGBA ( const unsigned char * data , int width , int height )
{
int stride = ( 4 * width ) ;
int bytes = ( stride * height ) + sizeof ( hdr ) ;
bytes = ( bytes + 3 ) & ( ~ 3 ) ;
u8 * pdata = new u8 [ bytes ] ;
memset ( pdata , 0 , bytes ) ;
memcpy ( pdata , hdr , sizeof ( hdr ) ) ;
u8 * pixelData = pdata + sizeof ( hdr ) ;
for ( int y = 0 ; y < height ; y + + )
{
memcpy ( pixelData + y * stride , data + ( height - y - 1 ) * stride , stride ) ;
}
* ( int * ) ( pdata + 18 ) = width ;
* ( int * ) ( pdata + 22 ) = height ;
* ( u32 * ) ( pdata + 34 ) = bytes - sizeof ( hdr ) ;
wxMemoryInputStream is ( pdata , bytes ) ;
wxBitmap map ( wxImage ( is , wxBITMAP_TYPE_BMP , - 1 ) , - 1 ) ;
delete [ ] pdata ;
return map ;
}
BEGIN_EVENT_TABLE ( CMemcardManager , wxDialog )
EVT_CLOSE ( CMemcardManager : : OnClose )
2008-12-10 02:41:55 +00:00
2008-12-13 11:30:00 +00:00
EVT_BUTTON ( ID_COPYFROM_A , CMemcardManager : : CopyDeleteClick )
EVT_BUTTON ( ID_COPYFROM_B , CMemcardManager : : CopyDeleteClick )
2008-12-10 02:41:55 +00:00
EVT_BUTTON ( ID_DELETE_A , CMemcardManager : : CopyDeleteClick )
EVT_BUTTON ( ID_DELETE_B , CMemcardManager : : CopyDeleteClick )
EVT_BUTTON ( ID_SAVEIMPORT_B , CMemcardManager : : CopyDeleteClick )
EVT_BUTTON ( ID_SAVEEXPORT_B , CMemcardManager : : CopyDeleteClick )
EVT_BUTTON ( ID_SAVEIMPORT_A , CMemcardManager : : CopyDeleteClick )
EVT_BUTTON ( ID_SAVEEXPORT_A , CMemcardManager : : CopyDeleteClick )
2008-12-08 05:30:24 +00:00
EVT_BUTTON ( ID_CONVERTTOGCI , CMemcardManager : : CopyDeleteClick )
2008-12-10 02:41:55 +00:00
EVT_BUTTON ( ID_PREVPAGE_A , CMemcardManager : : OnPageChange )
EVT_BUTTON ( ID_NEXTPAGE_A , CMemcardManager : : OnPageChange )
EVT_BUTTON ( ID_PREVPAGE_B , CMemcardManager : : OnPageChange )
EVT_BUTTON ( ID_NEXTPAGE_B , CMemcardManager : : OnPageChange )
EVT_FILEPICKER_CHANGED ( ID_MEMCARDPATH_A , CMemcardManager : : OnPathChange )
EVT_FILEPICKER_CHANGED ( ID_MEMCARDPATH_B , CMemcardManager : : OnPathChange )
2008-12-12 07:14:37 +00:00
2008-12-20 18:43:52 +00:00
EVT_MENU_RANGE ( ID_MEMCARDPATH_A , ID_USEPAGES , CMemcardManager : : OnMenuChange )
2008-12-13 11:30:00 +00:00
EVT_MENU_RANGE ( ID_COPYFROM_A , ID_CONVERTTOGCI , CMemcardManager : : CopyDeleteClick )
2008-12-12 07:14:37 +00:00
EVT_MENU_RANGE ( ID_NEXTPAGE_A , ID_PREVPAGE_B , CMemcardManager : : OnPageChange )
EVT_MENU_RANGE ( COLUMN_BANNER , NUMBER_OF_COLUMN , CMemcardManager : : OnMenuChange )
2008-12-10 02:41:55 +00:00
END_EVENT_TABLE ( )
BEGIN_EVENT_TABLE ( CMemcardManager : : CMemcardListCtrl , wxListCtrl )
EVT_RIGHT_DOWN ( CMemcardManager : : CMemcardListCtrl : : OnRightClick )
2008-12-08 05:30:24 +00:00
END_EVENT_TABLE ( )
CMemcardManager : : CMemcardManager ( wxWindow * parent , wxWindowID id , const wxString & title , const wxPoint & position , const wxSize & size , long style )
: wxDialog ( parent , id , title , position , size , style )
{
2008-12-10 02:41:55 +00:00
memoryCard [ SLOT_A ] = NULL ;
memoryCard [ SLOT_B ] = NULL ;
2010-12-10 07:11:05 +00:00
if ( ! LoadSettings ( ) )
2008-12-10 02:41:55 +00:00
{
2010-12-10 07:11:05 +00:00
itemsPerPage = 16 ;
mcmSettings . usePages = true ;
for ( int i = 0 ; i < NUMBER_OF_COLUMN ; i + + )
{
mcmSettings . column [ i ] = ( i < = COLUMN_FIRSTBLOCK ) ? true : false ;
}
2008-12-10 02:41:55 +00:00
}
maxPages = ( 128 / itemsPerPage ) - 1 ;
2008-12-08 05:30:24 +00:00
CreateGUIControls ( ) ;
}
CMemcardManager : : ~ CMemcardManager ( )
{
2008-12-10 02:41:55 +00:00
if ( memoryCard [ SLOT_A ] )
{
delete memoryCard [ SLOT_A ] ;
memoryCard [ SLOT_A ] = NULL ;
}
if ( memoryCard [ SLOT_B ] )
{
delete memoryCard [ SLOT_B ] ;
memoryCard [ SLOT_B ] = NULL ;
}
2010-12-10 07:11:05 +00:00
SaveSettings ( ) ;
2008-12-10 02:41:55 +00:00
}
2010-12-10 07:11:05 +00:00
bool CMemcardManager : : LoadSettings ( )
2008-12-10 02:41:55 +00:00
{
2010-02-02 21:56:29 +00:00
if ( MemcardManagerIni . Load ( File : : GetUserPath ( F_DOLPHINCONFIG_IDX ) ) )
2008-12-08 05:30:24 +00:00
{
2010-12-10 07:11:05 +00:00
iniMemcardSection = MemcardManagerIni . GetOrCreateSection ( " MemcardManager " ) ;
iniMemcardSection - > Get ( " Items per page " , & itemsPerPage , 16 ) ;
iniMemcardSection - > Get ( " DefaultMemcardA " , & ( DefaultMemcard [ SLOT_A ] ) , " " ) ;
iniMemcardSection - > Get ( " DefaultMemcardB " , & ( DefaultMemcard [ SLOT_B ] ) , " " ) ;
iniMemcardSection - > Get ( " DefaultIOFolder " , & DefaultIOPath , " /Users/GC " ) ;
iniMemcardSection - > Get ( " Use Pages " , & mcmSettings . usePages , true ) ;
iniMemcardSection - > Get ( " cBanner " , & mcmSettings . column [ COLUMN_BANNER ] , true ) ;
iniMemcardSection - > Get ( " cTitle " , & mcmSettings . column [ COLUMN_TITLE ] , true ) ;
iniMemcardSection - > Get ( " cComment " , & mcmSettings . column [ COLUMN_COMMENT ] , true ) ;
iniMemcardSection - > Get ( " cIcon " , & mcmSettings . column [ COLUMN_ICON ] , true ) ;
iniMemcardSection - > Get ( " cBlocks " , & mcmSettings . column [ COLUMN_BLOCKS ] , true ) ;
iniMemcardSection - > Get ( " cFirst Block " , & mcmSettings . column [ COLUMN_FIRSTBLOCK ] , true ) ;
mcmSettings . column [ NUMBER_OF_COLUMN ] = false ;
2009-01-15 06:06:30 +00:00
for ( int i = COLUMN_GAMECODE ; i < NUMBER_OF_COLUMN ; i + + )
{
2010-12-10 07:11:05 +00:00
mcmSettings . column [ i ] = mcmSettings . column [ NUMBER_OF_COLUMN ] ;
2009-01-15 06:06:30 +00:00
}
2010-12-10 07:11:05 +00:00
return true ;
2008-12-08 05:30:24 +00:00
}
2010-12-10 07:11:05 +00:00
return false ;
2008-12-10 02:41:55 +00:00
}
2010-12-10 07:11:05 +00:00
bool CMemcardManager : : SaveSettings ( )
2008-12-10 02:41:55 +00:00
{
2010-02-02 21:56:29 +00:00
MemcardManagerIni . Load ( File : : GetUserPath ( F_DOLPHINCONFIG_IDX ) ) ;
2010-12-10 07:11:05 +00:00
iniMemcardSection = MemcardManagerIni . GetOrCreateSection ( " MemcardManager " ) ;
iniMemcardSection - > Set ( " Items per page " , itemsPerPage , 16 ) ;
iniMemcardSection - > Set ( " DefaultMemcardA " , DefaultMemcard [ SLOT_A ] , " " ) ;
iniMemcardSection - > Set ( " DefaultMemcardB " , DefaultMemcard [ SLOT_B ] , " " ) ;
iniMemcardSection - > Set ( " Use Pages " , mcmSettings . usePages , true ) ;
iniMemcardSection - > Set ( " cBanner " , mcmSettings . column [ COLUMN_BANNER ] , true ) ;
iniMemcardSection - > Set ( " cTitle " , mcmSettings . column [ COLUMN_TITLE ] , true ) ;
iniMemcardSection - > Set ( " cComment " , mcmSettings . column [ COLUMN_COMMENT ] , true ) ;
iniMemcardSection - > Set ( " cIcon " , mcmSettings . column [ COLUMN_ICON ] , true ) ;
iniMemcardSection - > Set ( " cBlocks " , mcmSettings . column [ COLUMN_BLOCKS ] , true ) ;
iniMemcardSection - > Set ( " cFirst Block " , mcmSettings . column [ COLUMN_FIRSTBLOCK ] , true ) ;
return MemcardManagerIni . Save ( File : : GetUserPath ( F_DOLPHINCONFIG_IDX ) ) ;
2008-12-08 05:30:24 +00:00
}
void CMemcardManager : : CreateGUIControls ( )
{
2008-12-10 02:41:55 +00:00
// Create the controls for both memcards
2008-12-08 05:30:24 +00:00
2009-02-23 18:08:03 +00:00
const wxChar * ARROW [ 2 ] = { _T ( " <- " ) , _T ( " -> " ) } ;
2008-12-08 05:30:24 +00:00
2011-01-05 04:35:46 +00:00
m_ConvertToGci = new wxButton ( this , ID_CONVERTTOGCI , _ ( " Convert to GCI " ) ) ;
2008-12-13 11:30:00 +00:00
2009-02-22 03:23:48 +00:00
for ( int slot = SLOT_A ; slot < SLOT_B + 1 ; slot + + )
{
m_CopyFrom [ slot ] = new wxButton ( this , ID_COPYFROM_A + slot ,
2011-01-05 17:56:08 +00:00
wxString : : Format ( _ ( " %1$sCopy%1$s " ) , ARROW [ slot ? 0 : 1 ] ) ) ;
2009-02-22 03:23:48 +00:00
m_SaveImport [ slot ] = new wxButton ( this , ID_SAVEIMPORT_A + slot ,
2011-01-05 17:56:08 +00:00
wxString : : Format ( _ ( " %sImport GCI%s " ) , ARROWS ) ) ;
2009-02-22 03:23:48 +00:00
m_SaveExport [ slot ] = new wxButton ( this , ID_SAVEEXPORT_A + slot ,
2011-01-05 17:56:08 +00:00
wxString : : Format ( _ ( " %sExport GCI%s " ) , ARROWS ) ) ;
2009-02-22 03:23:48 +00:00
m_Delete [ slot ] = new wxButton ( this , ID_DELETE_A + slot ,
2011-01-05 17:56:08 +00:00
wxString : : Format ( _ ( " %sDelete%s " ) , ARROWS ) ) ;
2009-02-22 03:23:48 +00:00
2011-01-05 04:35:46 +00:00
m_PrevPage [ slot ] = new wxButton ( this , ID_PREVPAGE_A + slot , _ ( " Prev Page " ) ) ;
m_NextPage [ slot ] = new wxButton ( this , ID_NEXTPAGE_A + slot , _ ( " Next Page " ) ) ;
2009-02-22 03:23:48 +00:00
t_Status [ slot ] = new wxStaticText ( this , 0 , wxEmptyString , wxDefaultPosition , wxDefaultSize , 0 , wxEmptyString ) ;
sPages [ slot ] = new wxBoxSizer ( wxHORIZONTAL ) ;
sPages [ slot ] - > Add ( m_PrevPage [ slot ] , 0 , wxEXPAND | wxALL , 1 ) ;
sPages [ slot ] - > Add ( t_Status [ slot ] , 0 , wxEXPAND | wxALL , 5 ) ;
sPages [ slot ] - > Add ( 0 , 0 , 1 , wxEXPAND | wxALL , 0 ) ;
sPages [ slot ] - > Add ( m_NextPage [ slot ] , 0 , wxEXPAND | wxALL , 1 ) ;
2010-02-02 21:56:29 +00:00
m_MemcardPath [ slot ] = new wxFilePickerCtrl ( this , ID_MEMCARDPATH_A + slot ,
2011-01-05 04:35:46 +00:00
wxString : : From8BitData ( File : : GetUserPath ( D_GCUSER_IDX ) ) , _ ( " Choose a memory card: " ) ,
2011-01-06 13:57:46 +00:00
_ ( " Gamecube Memory Cards (*.raw,*.gcp) " ) + wxString ( wxT ( " |*.raw;*.gcp " ) ) , wxDefaultPosition , wxDefaultSize , wxFLP_USE_TEXTCTRL | wxFLP_OPEN ) ;
2008-12-10 02:41:55 +00:00
2009-02-22 03:23:48 +00:00
m_MemcardList [ slot ] = new CMemcardListCtrl ( this , ID_MEMCARDLIST_A + slot , wxDefaultPosition , wxSize ( 350 , 400 ) ,
2010-12-10 07:11:05 +00:00
wxLC_REPORT | wxSUNKEN_BORDER | wxLC_ALIGN_LEFT | wxLC_SINGLE_SEL , mcmSettings ) ;
2008-12-08 05:30:24 +00:00
2009-02-22 03:23:48 +00:00
m_MemcardList [ slot ] - > AssignImageList ( new wxImageList ( 96 , 32 ) , wxIMAGE_LIST_SMALL ) ;
2011-01-06 13:57:46 +00:00
sMemcard [ slot ] = new wxStaticBoxSizer ( wxVERTICAL , this , _ ( " Memory Card " ) + wxString : : Format ( wxT ( " %c " ) , ' A ' + slot ) ) ;
2009-02-22 03:23:48 +00:00
sMemcard [ slot ] - > Add ( m_MemcardPath [ slot ] , 0 , wxEXPAND | wxALL , 5 ) ;
sMemcard [ slot ] - > Add ( m_MemcardList [ slot ] , 1 , wxEXPAND | wxALL , 5 ) ;
sMemcard [ slot ] - > Add ( sPages [ slot ] , 0 , wxEXPAND | wxALL , 1 ) ;
}
2008-12-08 05:30:24 +00:00
sButtons = new wxBoxSizer ( wxVERTICAL ) ;
sButtons - > AddStretchSpacer ( 2 ) ;
2008-12-20 08:07:04 +00:00
sButtons - > Add ( m_CopyFrom [ SLOT_B ] , 0 , wxEXPAND , 5 ) ;
sButtons - > Add ( m_CopyFrom [ SLOT_A ] , 0 , wxEXPAND , 5 ) ;
2008-12-08 05:30:24 +00:00
sButtons - > AddStretchSpacer ( 1 ) ;
2008-12-20 08:07:04 +00:00
sButtons - > Add ( m_SaveImport [ SLOT_A ] , 0 , wxEXPAND , 5 ) ;
sButtons - > Add ( m_SaveExport [ SLOT_A ] , 0 , wxEXPAND , 5 ) ;
2008-12-08 05:30:24 +00:00
sButtons - > AddStretchSpacer ( 1 ) ;
sButtons - > Add ( m_ConvertToGci , 0 , wxEXPAND , 5 ) ;
sButtons - > AddStretchSpacer ( 1 ) ;
2008-12-20 08:07:04 +00:00
sButtons - > Add ( m_SaveImport [ SLOT_B ] , 0 , wxEXPAND , 5 ) ;
sButtons - > Add ( m_SaveExport [ SLOT_B ] , 0 , wxEXPAND , 5 ) ;
2008-12-08 05:30:24 +00:00
sButtons - > AddStretchSpacer ( 1 ) ;
2008-12-20 08:07:04 +00:00
sButtons - > Add ( m_Delete [ SLOT_A ] , 0 , wxEXPAND , 5 ) ;
sButtons - > Add ( m_Delete [ SLOT_B ] , 0 , wxEXPAND , 5 ) ;
2008-12-08 05:30:24 +00:00
sButtons - > AddStretchSpacer ( 1 ) ;
sMain = new wxBoxSizer ( wxHORIZONTAL ) ;
2009-02-22 03:23:48 +00:00
sMain - > Add ( sMemcard [ SLOT_A ] , 1 , wxEXPAND | wxALL , 5 ) ;
2008-12-08 05:30:24 +00:00
sMain - > Add ( sButtons , 0 , wxEXPAND , 0 ) ;
2009-02-22 03:23:48 +00:00
sMain - > Add ( sMemcard [ SLOT_B ] , 1 , wxEXPAND | wxALL , 5 ) ;
2008-12-08 05:30:24 +00:00
this - > SetSizer ( sMain ) ;
sMain - > SetSizeHints ( this ) ;
Fit ( ) ;
2010-02-25 06:12:35 +00:00
Center ( ) ;
2009-02-22 03:23:48 +00:00
for ( int i = SLOT_A ; i < SLOT_B + 1 ; i + + )
2008-12-20 08:47:38 +00:00
{
m_PrevPage [ i ] - > Disable ( ) ;
m_NextPage [ i ] - > Disable ( ) ;
m_CopyFrom [ i ] - > Disable ( ) ;
m_SaveImport [ i ] - > Disable ( ) ;
m_SaveExport [ i ] - > Disable ( ) ;
m_Delete [ i ] - > Disable ( ) ;
2010-12-10 07:11:05 +00:00
if ( DefaultMemcard [ i ] . length ( ) )
2008-12-20 08:47:38 +00:00
{
2010-06-11 08:39:03 +00:00
m_MemcardPath [ i ] - > SetPath ( wxString : : From8BitData ( DefaultMemcard [ i ] . c_str ( ) ) ) ;
2010-12-10 07:11:05 +00:00
ChangePath ( i ) ;
2008-12-20 08:47:38 +00:00
}
}
2008-12-08 05:30:24 +00:00
}
void CMemcardManager : : OnClose ( wxCloseEvent & WXUNUSED ( event ) )
{
Destroy ( ) ;
}
void CMemcardManager : : OnPathChange ( wxFileDirPickerEvent & event )
2008-12-20 08:47:38 +00:00
{
2010-12-10 07:11:05 +00:00
ChangePath ( event . GetId ( ) - ID_MEMCARDPATH_A ) ;
2008-12-20 08:47:38 +00:00
}
2010-12-10 07:11:05 +00:00
void CMemcardManager : : ChangePath ( int slot )
2008-12-08 05:30:24 +00:00
{
2010-12-10 07:11:05 +00:00
int slot2 = ( slot = = SLOT_A ) ? SLOT_B : SLOT_A ;
page [ slot ] = FIRSTPAGE ;
if ( mcmSettings . usePages & & m_PrevPage [ slot ] - > IsEnabled ( ) )
2008-12-08 05:30:24 +00:00
{
2010-12-10 07:11:05 +00:00
m_PrevPage [ slot ] - > Disable ( ) ;
m_MemcardList [ slot ] - > prevPage = false ;
}
if ( ! strcasecmp ( m_MemcardPath [ slot2 ] - > GetPath ( ) . mb_str ( ) , m_MemcardPath [ slot ] - > GetPath ( ) . mb_str ( ) ) )
{
if ( m_MemcardPath [ slot ] - > GetPath ( ) . length ( ) )
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " Memcard already opened " ) ) ;
2010-12-10 07:11:05 +00:00
}
else
{
if ( m_MemcardPath [ slot ] - > GetPath ( ) . length ( ) & & ReloadMemcard ( m_MemcardPath [ slot ] - > GetPath ( ) . mb_str ( ) , slot ) )
2008-12-08 05:30:24 +00:00
{
2010-12-10 07:11:05 +00:00
mcmSettings . twoCardsLoaded = true ;
2008-12-20 08:07:04 +00:00
m_SaveImport [ slot ] - > Enable ( ) ;
m_SaveExport [ slot ] - > Enable ( ) ;
m_Delete [ slot ] - > Enable ( ) ;
2008-12-13 11:30:00 +00:00
}
2010-12-10 07:11:05 +00:00
else
2008-12-10 02:41:55 +00:00
{
2010-12-10 07:11:05 +00:00
if ( memoryCard [ slot ] )
{
delete memoryCard [ slot ] ;
memoryCard [ slot ] = NULL ;
}
mcmSettings . twoCardsLoaded = false ;
m_MemcardPath [ slot ] - > SetPath ( wxEmptyString ) ;
m_MemcardList [ slot ] - > ClearAll ( ) ;
t_Status [ slot ] - > SetLabel ( wxEmptyString ) ;
m_SaveImport [ slot ] - > Disable ( ) ;
m_SaveExport [ slot ] - > Disable ( ) ;
m_Delete [ slot ] - > Disable ( ) ;
if ( mcmSettings . usePages )
{
m_PrevPage [ slot ] - > Disable ( ) ;
m_NextPage [ slot ] - > Disable ( ) ;
}
2008-12-10 02:41:55 +00:00
}
2008-12-08 05:30:24 +00:00
}
2009-02-22 03:23:48 +00:00
if ( m_Delete [ SLOT_A ] - > IsEnabled ( ) & & m_Delete [ SLOT_B ] - > IsEnabled ( ) )
2008-12-08 05:30:24 +00:00
{
2008-12-20 08:07:04 +00:00
m_CopyFrom [ SLOT_A ] - > Enable ( ) ;
m_CopyFrom [ SLOT_B ] - > Enable ( ) ;
2008-12-08 05:30:24 +00:00
}
else
{
2008-12-20 08:07:04 +00:00
m_CopyFrom [ SLOT_A ] - > Disable ( ) ;
m_CopyFrom [ SLOT_B ] - > Disable ( ) ;
2008-12-08 05:30:24 +00:00
}
}
void CMemcardManager : : OnPageChange ( wxCommandEvent & event )
{
2008-12-20 08:07:04 +00:00
int slot = SLOT_B ;
2008-12-08 05:30:24 +00:00
switch ( event . GetId ( ) )
{
2008-12-10 02:41:55 +00:00
case ID_NEXTPAGE_A :
2008-12-20 08:07:04 +00:00
slot = SLOT_A ;
2008-12-10 02:41:55 +00:00
case ID_NEXTPAGE_B :
2008-12-20 08:07:04 +00:00
if ( ! m_PrevPage [ slot ] - > IsEnabled ( ) )
2008-12-10 02:41:55 +00:00
{
2008-12-20 08:07:04 +00:00
m_PrevPage [ slot ] - > Enable ( ) ;
m_MemcardList [ slot ] - > prevPage = true ;
2008-12-10 02:41:55 +00:00
}
2008-12-20 08:07:04 +00:00
page [ slot ] + + ;
if ( page [ slot ] = = maxPages )
2008-12-10 02:41:55 +00:00
{
2008-12-20 08:07:04 +00:00
m_NextPage [ slot ] - > Disable ( ) ;
m_MemcardList [ slot ] - > nextPage = false ;
2008-12-10 02:41:55 +00:00
}
2008-12-20 08:07:04 +00:00
ReloadMemcard ( m_MemcardPath [ slot ] - > GetPath ( ) . mb_str ( ) , slot ) ;
2008-12-08 05:30:24 +00:00
break ;
2008-12-10 02:41:55 +00:00
case ID_PREVPAGE_A :
2008-12-20 08:07:04 +00:00
slot = SLOT_A ;
2008-12-10 02:41:55 +00:00
case ID_PREVPAGE_B :
2008-12-20 08:07:04 +00:00
if ( ! m_NextPage [ slot ] - > IsEnabled ( ) )
2008-12-10 02:41:55 +00:00
{
2008-12-20 08:07:04 +00:00
m_NextPage [ slot ] - > Enable ( ) ;
m_MemcardList [ slot ] - > nextPage = true ;
2008-12-10 02:41:55 +00:00
}
2008-12-20 08:07:04 +00:00
page [ slot ] - - ;
if ( ! page [ slot ] )
2008-12-10 02:41:55 +00:00
{
2008-12-20 08:07:04 +00:00
m_PrevPage [ slot ] - > Disable ( ) ;
m_MemcardList [ slot ] - > prevPage = false ;
2008-12-10 02:41:55 +00:00
}
2008-12-20 08:07:04 +00:00
ReloadMemcard ( m_MemcardPath [ slot ] - > GetPath ( ) . mb_str ( ) , slot ) ;
2008-12-08 05:30:24 +00:00
break ;
}
}
2008-12-10 02:41:55 +00:00
void CMemcardManager : : OnMenuChange ( wxCommandEvent & event )
{
2010-12-10 07:11:05 +00:00
int _id = event . GetId ( ) ;
switch ( _id )
2008-12-10 02:41:55 +00:00
{
2010-12-10 07:11:05 +00:00
case ID_MEMCARDPATH_A :
case ID_MEMCARDPATH_B :
DefaultMemcard [ _id - ID_MEMCARDPATH_A ] = m_MemcardPath [ _id - ID_MEMCARDPATH_A ] - > GetPath ( ) . mb_str ( ) ;
return ;
2008-12-20 18:43:52 +00:00
case ID_USEPAGES :
2010-12-10 07:11:05 +00:00
mcmSettings . usePages = ! mcmSettings . usePages ;
if ( ! mcmSettings . usePages )
2008-12-10 02:41:55 +00:00
{
2008-12-20 08:07:04 +00:00
m_PrevPage [ SLOT_A ] - > Disable ( ) ;
m_PrevPage [ SLOT_B ] - > Disable ( ) ;
m_NextPage [ SLOT_A ] - > Disable ( ) ;
m_NextPage [ SLOT_B ] - > Disable ( ) ;
2010-12-10 07:11:05 +00:00
m_MemcardList [ SLOT_A ] - > prevPage =
m_MemcardList [ SLOT_B ] - > prevPage = false ;
page [ SLOT_A ] =
page [ SLOT_B ] = FIRSTPAGE ;
2008-12-10 02:41:55 +00:00
}
2008-12-20 18:43:52 +00:00
break ;
2009-01-15 06:06:30 +00:00
case NUMBER_OF_COLUMN :
2010-12-10 07:11:05 +00:00
for ( int i = COLUMN_GAMECODE ; i < = NUMBER_OF_COLUMN ; i + + )
2009-01-15 06:06:30 +00:00
{
2010-12-10 07:11:05 +00:00
mcmSettings . column [ i ] = ! mcmSettings . column [ i ] ;
2009-01-15 06:06:30 +00:00
}
2010-12-10 07:11:05 +00:00
break ;
2008-12-20 18:43:52 +00:00
default :
2010-12-10 07:11:05 +00:00
mcmSettings . column [ _id ] = ! mcmSettings . column [ _id ] ;
2008-12-20 18:43:52 +00:00
break ;
2008-12-10 02:41:55 +00:00
}
2010-12-10 07:11:05 +00:00
if ( memoryCard [ SLOT_A ] ) ReloadMemcard ( m_MemcardPath [ SLOT_A ] - > GetPath ( ) . mb_str ( ) , SLOT_A ) ;
if ( memoryCard [ SLOT_B ] ) ReloadMemcard ( m_MemcardPath [ SLOT_B ] - > GetPath ( ) . mb_str ( ) , SLOT_B ) ;
2008-12-10 02:41:55 +00:00
}
2008-12-13 11:30:00 +00:00
bool CMemcardManager : : CopyDeleteSwitch ( u32 error , int slot )
{
switch ( error )
{
case GCS :
2011-01-12 13:14:50 +00:00
SuccessAlert ( " %s " , _wxt ( " File converted to .gci " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case SUCCESS :
if ( slot ! = - 1 )
{
memoryCard [ slot ] - > FixChecksums ( ) ;
if ( ! memoryCard [ slot ] - > Save ( ) ) PanicAlert ( E_SAVEFAILED ) ;
2008-12-20 08:07:04 +00:00
page [ slot ] = FIRSTPAGE ;
ReloadMemcard ( m_MemcardPath [ slot ] - > GetPath ( ) . mb_str ( ) , slot ) ;
2008-12-13 11:30:00 +00:00
}
break ;
case NOMEMCARD :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " File is not recognized as a memcard " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case OPENFAIL :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " File could not be opened \n or does not have a valid extension " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case OUTOFBLOCKS :
if ( slot = = - 1 )
{
PanicAlert ( E_UNK ) ;
break ;
}
2011-01-12 13:14:50 +00:00
PanicAlert ( _wxt ( " Only %d blocks available " ) , memoryCard [ slot ] - > GetFreeBlocks ( ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case OUTOFDIRENTRIES :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " No free dir index entries " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case LENGTHFAIL :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " Imported file has invalid length " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case INVALIDFILESIZE :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " The save you are trying to copy has an invalid file size " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case TITLEPRESENT :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " Memcard already has a save for this title " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case SAVFAIL :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " Imported file has sav extension \n but does not have a correct header " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case GCSFAIL :
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " Imported file has gsc extension \n but does not have a correct header " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case FAIL :
2009-01-15 06:06:30 +00:00
if ( slot = = - 1 )
{
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " Export Failed " ) ) ;
2009-01-15 06:06:30 +00:00
return false ;
}
2011-01-12 13:14:50 +00:00
PanicAlert ( " %s " , _wxt ( " Invalid bat.map or dir entry " ) ) ;
2008-12-13 11:30:00 +00:00
break ;
case WRITEFAIL :
PanicAlert ( E_SAVEFAILED ) ;
break ;
2009-07-18 07:59:31 +00:00
case DELETE_FAIL :
2011-01-12 18:09:16 +00:00
PanicAlert ( " %s " , _wxt ( " Order of files in the File Directory do not match the block order \n Right click and export all of the saves, \n and import the the saves to a new memcard \n " ) ) ;
2009-07-18 07:59:31 +00:00
break ;
2008-12-13 11:30:00 +00:00
default :
PanicAlert ( E_UNK ) ;
break ;
}
return true ;
}
2008-12-10 02:41:55 +00:00
2008-12-08 05:30:24 +00:00
void CMemcardManager : : CopyDeleteClick ( wxCommandEvent & event )
{
2008-12-10 02:41:55 +00:00
int index_A = m_MemcardList [ SLOT_A ] - > GetNextItem ( - 1 , wxLIST_NEXT_ALL , wxLIST_STATE_SELECTED ) ;
int index_B = m_MemcardList [ SLOT_B ] - > GetNextItem ( - 1 , wxLIST_NEXT_ALL , wxLIST_STATE_SELECTED ) ;
int slot = SLOT_B ;
2008-12-13 11:30:00 +00:00
int slot2 = SLOT_A ;
2008-12-10 02:41:55 +00:00
int index = index_B ;
2008-12-08 05:30:24 +00:00
std : : string fileName2 ( " " ) ;
2008-12-20 08:07:04 +00:00
if ( index_A ! = wxNOT_FOUND & & page [ SLOT_A ] ) index_A + = itemsPerPage * page [ SLOT_A ] ;
if ( index_B ! = wxNOT_FOUND & & page [ SLOT_B ] ) index_B + = itemsPerPage * page [ SLOT_B ] ;
2008-12-08 05:30:24 +00:00
switch ( event . GetId ( ) )
{
2008-12-13 11:30:00 +00:00
case ID_COPYFROM_B :
slot = SLOT_A ;
slot2 = SLOT_B ;
case ID_COPYFROM_A :
index = slot2 ? index_B : index_A ;
if ( ( index ! = wxNOT_FOUND ) )
2008-12-08 05:30:24 +00:00
{
2008-12-13 11:30:00 +00:00
CopyDeleteSwitch ( memoryCard [ slot ] - > CopyFrom ( * memoryCard [ slot2 ] , index ) , slot ) ;
2008-12-08 05:30:24 +00:00
}
break ;
2008-12-10 02:41:55 +00:00
case ID_FIXCHECKSUM_A :
slot = SLOT_A ;
case ID_FIXCHECKSUM_B :
2008-12-13 11:30:00 +00:00
if ( memoryCard [ slot ] - > FixChecksums ( ) & & memoryCard [ slot ] - > Save ( ) )
2008-12-08 05:30:24 +00:00
{
2011-01-12 13:14:50 +00:00
SuccessAlert ( " %s " , _wxt ( " The checksum was successfully fixed " ) ) ;
2008-12-08 05:30:24 +00:00
}
2008-12-13 11:30:00 +00:00
else PanicAlert ( E_SAVEFAILED ) ;
2008-12-08 05:30:24 +00:00
break ;
case ID_CONVERTTOGCI :
fileName2 = " convert " ;
2008-12-10 02:41:55 +00:00
case ID_SAVEIMPORT_A :
slot = SLOT_A ;
case ID_SAVEIMPORT_B :
2008-12-13 11:30:00 +00:00
{
2010-07-23 23:50:09 +00:00
wxString fileName = wxFileSelector (
2011-01-05 04:35:46 +00:00
_ ( " Select a save file to import " ) ,
2010-07-23 23:50:09 +00:00
( strcmp ( DefaultIOPath . c_str ( ) , " /Users/GC " ) = = 0 )
? wxString : : FromAscii ( " " )
: wxString : : From8BitData ( DefaultIOPath . c_str ( ) ) ,
wxEmptyString , wxEmptyString ,
2011-01-06 13:57:46 +00:00
_ ( " Native GCI files(*.gci) " ) + wxString ( wxT ( " |*.gci| " ) ) +
_ ( " MadCatz Gameshark files(*.gcs) " ) + wxString ( wxT ( " |*.gcs| " ) ) +
_ ( " Datel MaxDrive/Pro files(*.sav) " ) + wxString ( wxT ( " |*.sav " ) ) ,
2008-12-13 11:30:00 +00:00
wxFD_OPEN | wxFD_FILE_MUST_EXIST ) ;
2009-08-07 08:52:04 +00:00
if ( ! fileName . empty ( ) & & ! fileName2 . empty ( ) )
2008-12-08 05:30:24 +00:00
{
2011-01-06 13:57:46 +00:00
wxString temp2 = wxFileSelector ( _ ( " Save GCI as... " ) ,
2010-07-23 23:50:09 +00:00
wxEmptyString , wxEmptyString , wxT ( " .gci " ) ,
2011-01-06 13:57:46 +00:00
_ ( " GCI File(*.gci) " ) + wxString ( _T ( " |*.gci " ) ) ,
2008-12-13 11:30:00 +00:00
wxFD_OVERWRITE_PROMPT | wxFD_SAVE ) ;
if ( temp2 . empty ( ) ) break ;
fileName2 = temp2 . mb_str ( ) ;
2008-12-08 05:30:24 +00:00
}
2009-08-07 08:52:04 +00:00
if ( fileName . length ( ) > 0 )
2008-12-13 11:30:00 +00:00
{
2009-08-07 08:52:04 +00:00
CopyDeleteSwitch ( memoryCard [ slot ] - > ImportGci ( fileName . mb_str ( ) , fileName2 ) , slot ) ;
2008-12-13 11:30:00 +00:00
}
}
break ;
2008-12-10 02:41:55 +00:00
case ID_SAVEEXPORT_A :
slot = SLOT_A ;
index = index_A ;
case ID_SAVEEXPORT_B :
if ( index ! = wxNOT_FOUND )
2008-12-08 05:30:24 +00:00
{
2009-07-17 06:03:53 +00:00
char tempC [ 10 + DENTRY_STRLEN ] ,
tempC2 [ DENTRY_STRLEN ] ;
2009-02-22 03:23:48 +00:00
memoryCard [ slot ] - > DEntry_GameCode ( index , tempC ) ;
memoryCard [ slot ] - > DEntry_FileName ( index , tempC2 ) ;
sprintf ( tempC , " %s_%s.gci " , tempC , tempC2 ) ;
2010-07-23 23:50:09 +00:00
wxString fileName = wxFileSelector (
2011-01-06 13:57:46 +00:00
_ ( " Export save as... " ) ,
2010-07-23 23:50:09 +00:00
wxString : : From8BitData ( DefaultIOPath . c_str ( ) ) ,
wxString : : From8BitData ( tempC ) , wxT ( " .gci " ) ,
2011-01-06 13:57:46 +00:00
_ ( " Native GCI files(*.gci) " ) + wxString ( wxT ( " |*.gci| " ) ) +
_ ( " MadCatz Gameshark files(*.gcs) " ) + wxString ( wxT ( " |*.gcs| " ) ) +
_ ( " Datel MaxDrive/Pro files(*.sav) " ) + wxString ( wxT ( " |*.sav " ) ) ,
2009-02-22 03:23:48 +00:00
wxFD_OVERWRITE_PROMPT | wxFD_SAVE ) ;
2009-08-16 08:26:57 +00:00
if ( fileName . length ( ) > 0 )
2008-12-08 05:30:24 +00:00
{
2009-08-16 08:26:57 +00:00
if ( ! CopyDeleteSwitch ( memoryCard [ slot ] - > ExportGci ( index , fileName . mb_str ( ) , NULL ) , - 1 ) )
2009-02-22 03:23:48 +00:00
{
2009-08-16 08:26:57 +00:00
File : : Delete ( fileName . mb_str ( ) ) ;
2009-02-22 03:23:48 +00:00
}
2008-12-08 05:30:24 +00:00
}
}
break ;
2009-02-22 03:23:48 +00:00
case ID_EXPORTALL_A :
slot = SLOT_A ;
case ID_EXPORTALL_B :
{
2009-02-22 21:37:36 +00:00
std : : string path1 , path2 , mpath ;
mpath = m_MemcardPath [ slot ] - > GetPath ( ) . mb_str ( ) ;
SplitPath ( mpath , & path1 , & path2 , NULL ) ;
2009-02-22 03:23:48 +00:00
path1 + = path2 ;
File : : CreateDir ( path1 . c_str ( ) ) ;
2011-01-12 18:09:16 +00:00
if ( PanicYesNo ( _wxt ( " Warning: This will overwrite any existing saves that are in the folder: \n %s \n and have the same name as a file on your memcard \n Continue? " ) , path1 . c_str ( ) ) )
2009-02-22 03:23:48 +00:00
for ( int i = 0 ; i < DIRLEN ; i + + )
{
2009-02-22 21:37:36 +00:00
CopyDeleteSwitch ( memoryCard [ slot ] - > ExportGci ( i , " . " , & path1 ) , - 1 ) ;
2009-02-22 03:23:48 +00:00
}
break ;
}
2008-12-10 02:41:55 +00:00
case ID_DELETE_A :
2008-12-23 07:20:22 +00:00
slot = SLOT_A ;
2008-12-10 02:41:55 +00:00
index = index_A ;
case ID_DELETE_B :
if ( index ! = wxNOT_FOUND )
2008-12-08 05:30:24 +00:00
{
2008-12-13 11:30:00 +00:00
CopyDeleteSwitch ( memoryCard [ slot ] - > RemoveFile ( index ) , slot ) ;
2008-12-08 05:30:24 +00:00
}
break ;
}
}
2008-12-20 08:07:04 +00:00
bool CMemcardManager : : ReloadMemcard ( const char * fileName , int card )
2009-08-07 08:52:04 +00:00
{
2008-12-08 05:30:24 +00:00
if ( memoryCard [ card ] ) delete memoryCard [ card ] ;
// TODO: add error checking and animate icons
memoryCard [ card ] = new GCMemcard ( fileName ) ;
2008-12-20 08:07:04 +00:00
if ( memoryCard [ card ] - > fail ) return false ;
2008-12-08 05:30:24 +00:00
2009-08-07 08:52:04 +00:00
int j ;
wxString wxTitle ,
wxComment ,
wxBlock ,
wxFirstBlock ,
wxLabel ,
tString ;
2008-12-08 05:30:24 +00:00
m_MemcardList [ card ] - > Hide ( ) ;
m_MemcardList [ card ] - > ClearAll ( ) ;
2008-12-10 02:41:55 +00:00
2011-01-05 04:35:46 +00:00
m_MemcardList [ card ] - > InsertColumn ( COLUMN_BANNER , _ ( " Banner " ) ) ;
m_MemcardList [ card ] - > InsertColumn ( COLUMN_TITLE , _ ( " Title " ) ) ;
m_MemcardList [ card ] - > InsertColumn ( COLUMN_COMMENT , _ ( " Comment " ) ) ;
m_MemcardList [ card ] - > InsertColumn ( COLUMN_ICON , _ ( " Icon " ) ) ;
m_MemcardList [ card ] - > InsertColumn ( COLUMN_BLOCKS , _ ( " Blocks " ) ) ;
m_MemcardList [ card ] - > InsertColumn ( COLUMN_FIRSTBLOCK , _ ( " First Block " ) ) ;
2008-12-08 05:30:24 +00:00
wxImageList * list = m_MemcardList [ card ] - > GetImageList ( wxIMAGE_LIST_SMALL ) ;
list - > RemoveAll ( ) ;
int nFiles = memoryCard [ card ] - > GetNumFiles ( ) ;
int * images = new int [ nFiles * 2 ] ;
2008-12-10 02:41:55 +00:00
2008-12-08 05:30:24 +00:00
for ( int i = 0 ; i < nFiles ; i + + )
{
static u32 pxdata [ 96 * 32 ] ;
static u8 animDelay [ 8 ] ;
static u32 animData [ 32 * 32 * 8 ] ;
int numFrames = memoryCard [ card ] - > ReadAnimRGBA8 ( i , animData , animDelay ) ;
if ( ! memoryCard [ card ] - > ReadBannerRGBA8 ( i , pxdata ) )
{
memset ( pxdata , 0 , 96 * 32 * 4 ) ;
if ( numFrames > 0 ) // Just use the first one
{
u32 * icdata = animData ;
for ( int y = 0 ; y < 32 ; y + + )
{
for ( int x = 0 ; x < 32 ; x + + )
{
2008-12-10 02:41:55 +00:00
pxdata [ y * 96 + x + 32 ] = icdata [ y * 32 + x ] ; // | 0xFF000000
2008-12-08 05:30:24 +00:00
}
}
}
}
wxBitmap map = wxBitmapFromMemoryRGBA ( ( u8 * ) pxdata , 96 , 32 ) ;
images [ i * 2 ] = list - > Add ( map ) ;
if ( numFrames > 0 )
{
memset ( pxdata , 0 , 96 * 32 * 4 ) ;
int frames = 3 ;
if ( numFrames < frames ) frames = numFrames ;
for ( int f = 0 ; f < frames ; f + + )
{
for ( int y = 0 ; y < 32 ; y + + )
{
for ( int x = 0 ; x < 32 ; x + + )
{
pxdata [ y * 96 + x + 32 * f ] = animData [ f * 32 * 32 + y * 32 + x ] ;
}
}
}
wxBitmap icon = wxBitmapFromMemoryRGBA ( ( u8 * ) pxdata , 96 , 32 ) ;
images [ i * 2 + 1 ] = list - > Add ( icon ) ;
}
}
2010-12-10 07:11:05 +00:00
int pagesMax = ( mcmSettings . usePages ) ?
( page [ card ] + 1 ) * itemsPerPage : 128 ;
for ( j = page [ card ] * itemsPerPage ; ( j < nFiles ) & & ( j < pagesMax ) ; j + + )
2008-12-08 05:30:24 +00:00
{
2009-07-17 06:03:53 +00:00
char title [ DENTRY_STRLEN ] ;
char comment [ DENTRY_STRLEN ] ;
2008-12-08 05:30:24 +00:00
u16 blocks ;
u16 firstblock ;
2008-12-10 02:41:55 +00:00
int index = m_MemcardList [ card ] - > InsertItem ( j , wxEmptyString ) ;
2008-12-08 05:30:24 +00:00
m_MemcardList [ card ] - > SetItem ( index , COLUMN_BANNER , wxEmptyString ) ;
2009-08-07 08:52:04 +00:00
2009-01-15 06:06:30 +00:00
if ( ! memoryCard [ card ] - > DEntry_Comment1 ( j , title ) ) title [ 0 ] = 0 ;
if ( ! memoryCard [ card ] - > DEntry_Comment2 ( j , comment ) ) comment [ 0 ] = 0 ;
2009-08-07 08:52:04 +00:00
2010-01-14 07:19:10 +00:00
bool ascii = memoryCard [ card ] - > IsAsciiEncoding ( ) ;
2011-01-09 14:11:46 +00:00
# ifdef _WIN32
2010-06-08 02:03:44 +00:00
wxCSConv SJISConv ( wxFontMapper : : GetEncodingName ( wxFONTENCODING_SHIFT_JIS ) ) ;
2011-01-09 14:11:46 +00:00
# else
wxCSConv SJISConv ( wxFontMapper : : GetEncodingName ( wxFONTENCODING_EUC_JP ) ) ;
2010-06-08 02:03:44 +00:00
# endif
2010-01-14 07:19:10 +00:00
wxTitle = wxString ( title , ascii ? * wxConvCurrent : SJISConv ) ;
wxComment = wxString ( comment , ascii ? * wxConvCurrent : SJISConv ) ;
2010-01-13 06:34:34 +00:00
2009-08-07 08:52:04 +00:00
m_MemcardList [ card ] - > SetItem ( index , COLUMN_TITLE , wxTitle ) ;
m_MemcardList [ card ] - > SetItem ( index , COLUMN_COMMENT , wxComment ) ;
2009-01-15 06:06:30 +00:00
blocks = memoryCard [ card ] - > DEntry_BlockCount ( j ) ;
2008-12-08 05:30:24 +00:00
if ( blocks = = 0xFFFF ) blocks = 0 ;
wxBlock . Printf ( wxT ( " %10d " ) , blocks ) ;
2008-12-10 02:41:55 +00:00
m_MemcardList [ card ] - > SetItem ( index , COLUMN_BLOCKS , wxBlock ) ;
2009-01-15 06:06:30 +00:00
firstblock = memoryCard [ card ] - > DEntry_FirstBlock ( j ) ;
2008-12-08 05:30:24 +00:00
if ( firstblock = = 0xFFFF ) firstblock = 3 ; // to make firstblock -1
2008-12-10 02:41:55 +00:00
wxFirstBlock . Printf ( wxT ( " %15d " ) , firstblock - 4 ) ;
2008-12-08 05:30:24 +00:00
m_MemcardList [ card ] - > SetItem ( index , COLUMN_FIRSTBLOCK , wxFirstBlock ) ;
m_MemcardList [ card ] - > SetItem ( index , COLUMN_ICON , wxEmptyString ) ;
if ( images [ j ] > = 0 )
{
m_MemcardList [ card ] - > SetItemImage ( index , images [ j * 2 ] ) ;
m_MemcardList [ card ] - > SetItemColumnImage ( index , COLUMN_ICON , images [ j * 2 + 1 ] ) ;
}
}
2010-12-10 07:11:05 +00:00
if ( mcmSettings . usePages )
2008-12-08 05:30:24 +00:00
{
2009-07-17 06:03:53 +00:00
if ( nFiles < = itemsPerPage )
{
m_PrevPage [ card ] - > Disable ( ) ;
m_MemcardList [ card ] - > prevPage = false ;
}
if ( j = = nFiles )
2008-12-10 02:41:55 +00:00
{
2008-12-20 08:07:04 +00:00
m_NextPage [ card ] - > Disable ( ) ;
m_MemcardList [ card ] - > nextPage = false ;
2008-12-10 02:41:55 +00:00
}
else
{
2008-12-20 08:07:04 +00:00
m_NextPage [ card ] - > Enable ( ) ;
m_MemcardList [ card ] - > nextPage = true ;
2008-12-10 02:41:55 +00:00
}
2008-12-08 05:30:24 +00:00
}
delete [ ] images ;
// Automatic column width and then show the list
2008-12-10 02:41:55 +00:00
for ( int i = 0 ; i < NUMBER_OF_COLUMN ; i + + )
2008-12-08 05:30:24 +00:00
{
2010-12-10 07:11:05 +00:00
if ( mcmSettings . column [ i ] )
2008-12-10 02:41:55 +00:00
m_MemcardList [ card ] - > SetColumnWidth ( i , wxLIST_AUTOSIZE ) ;
else
m_MemcardList [ card ] - > SetColumnWidth ( i , 0 ) ;
2008-12-08 05:30:24 +00:00
}
2008-12-10 02:41:55 +00:00
2008-12-08 05:30:24 +00:00
m_MemcardList [ card ] - > Show ( ) ;
2011-01-05 17:56:08 +00:00
wxLabel . Printf ( _ ( " %d Free Blocks; %d Free Dir Entries " ) ,
2009-02-22 03:23:48 +00:00
memoryCard [ card ] - > GetFreeBlocks ( ) , DIRLEN - nFiles ) ;
2008-12-20 08:07:04 +00:00
t_Status [ card ] - > SetLabel ( wxLabel ) ;
2008-12-08 05:30:24 +00:00
return true ;
}
2008-12-10 02:41:55 +00:00
void CMemcardManager : : CMemcardListCtrl : : OnRightClick ( wxMouseEvent & event )
{
int flags ;
long item = HitTest ( event . GetPosition ( ) , flags ) ;
2009-11-23 08:05:54 +00:00
wxMenu * popupMenu = new wxMenu ;
2008-12-10 02:41:55 +00:00
if ( item ! = wxNOT_FOUND )
{
if ( GetItemState ( item , wxLIST_STATE_SELECTED ) ! = wxLIST_STATE_SELECTED )
{
SetItemState ( item , wxLIST_STATE_SELECTED , wxLIST_STATE_SELECTED ) ;
}
SetItemState ( item , wxLIST_STATE_FOCUSED , wxLIST_STATE_FOCUSED ) ;
2010-12-10 07:11:05 +00:00
int slot = GetId ( ) - ID_MEMCARDLIST_A ;
2011-01-05 17:56:08 +00:00
popupMenu - > Append ( ID_COPYFROM_A + slot , wxString : : Format ( _ ( " Copy to Memcard %c " ) , ' B ' - slot ) ) ;
2011-01-05 04:35:46 +00:00
popupMenu - > Append ( ID_DELETE_A + slot , _ ( " Delete Save " ) ) ;
popupMenu - > Append ( ID_SAVEIMPORT_A + slot , _ ( " Import Save " ) ) ;
popupMenu - > Append ( ID_SAVEEXPORT_A + slot , _ ( " Export Save " ) ) ;
popupMenu - > Append ( ID_EXPORTALL_A + slot , _ ( " Export all saves " ) ) ;
2009-02-22 03:23:48 +00:00
2010-12-10 07:11:05 +00:00
popupMenu - > FindItem ( ID_COPYFROM_A + slot ) - > Enable ( __mcmSettings . twoCardsLoaded ) ;
2009-02-22 03:23:48 +00:00
2009-11-23 08:05:54 +00:00
popupMenu - > AppendSeparator ( ) ;
2009-02-22 03:23:48 +00:00
2011-01-05 04:35:46 +00:00
popupMenu - > Append ( ID_FIXCHECKSUM_A + slot , _ ( " Fix Checksums " ) ) ;
popupMenu - > Append ( ID_PREVPAGE_A + slot , _ ( " Previous Page " ) ) ;
popupMenu - > Append ( ID_NEXTPAGE_A + slot , _ ( " Next Page " ) ) ;
2011-01-05 17:56:08 +00:00
popupMenu - > Append ( ID_MEMCARDPATH_A + slot , wxString : : Format ( _ ( " Set as default Memcard %c " ) , ' A ' + slot ) ) ;
2011-01-05 04:35:46 +00:00
popupMenu - > AppendCheckItem ( ID_USEPAGES , _ ( " Enable pages " ) ) ;
2009-02-22 03:23:48 +00:00
2010-12-10 07:11:05 +00:00
popupMenu - > FindItem ( ID_PREVPAGE_A + slot ) - > Enable ( prevPage & & __mcmSettings . usePages ) ;
popupMenu - > FindItem ( ID_NEXTPAGE_A + slot ) - > Enable ( nextPage & & __mcmSettings . usePages ) ;
popupMenu - > FindItem ( ID_USEPAGES ) - > Check ( __mcmSettings . usePages ) ;
2009-02-22 03:23:48 +00:00
2009-11-23 08:05:54 +00:00
popupMenu - > AppendSeparator ( ) ;
2009-02-22 03:23:48 +00:00
2011-01-05 04:35:46 +00:00
popupMenu - > AppendCheckItem ( COLUMN_BANNER , _ ( " Show save banner " ) ) ;
popupMenu - > AppendCheckItem ( COLUMN_TITLE , _ ( " Show save title " ) ) ;
popupMenu - > AppendCheckItem ( COLUMN_COMMENT , _ ( " Show save comment " ) ) ;
popupMenu - > AppendCheckItem ( COLUMN_ICON , _ ( " Show save icon " ) ) ;
popupMenu - > AppendCheckItem ( COLUMN_BLOCKS , _ ( " Show save blocks " ) ) ;
2009-02-22 03:23:48 +00:00
for ( int i = COLUMN_BANNER ; i < = COLUMN_BLOCKS ; i + + )
{
2010-12-10 07:11:05 +00:00
popupMenu - > FindItem ( i ) - > Check ( __mcmSettings . column [ i ] ) ;
2009-02-22 03:23:48 +00:00
}
2008-12-10 02:41:55 +00:00
}
2009-11-23 08:05:54 +00:00
PopupMenu ( popupMenu ) ;
2008-12-10 02:41:55 +00:00
}
2009-04-28 02:30:50 +00:00