mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-02 02:52:30 +02:00
added gui support for compressed ISOs...
compression doesn't work and will be fixed (hopefully :D) git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@537 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
2ab92c9222
commit
ff863e0cec
@ -278,7 +278,7 @@ class CompressedBlobReader
|
||||
offset &= ~(1ULL << 63);
|
||||
}
|
||||
|
||||
u8* source = mapped_file->Lock(offset, comp_block_size);
|
||||
u8* source = mapped_file->Lock(offset, comp_block_size + 64*1024);
|
||||
u8* dest = cache[0];
|
||||
|
||||
if (uncompressed)
|
||||
@ -421,10 +421,14 @@ bool CompressFileToBlob(const char* infile, const char* outfile, u32 sub_type, i
|
||||
|
||||
for (u32 i = 0; i < header.num_blocks; i++)
|
||||
{
|
||||
if (i % (header.num_blocks / 100) == 0)
|
||||
if (i % (header.num_blocks / 1000) == 0)
|
||||
{
|
||||
u64 inpos = ftell(inf);
|
||||
int ratio = (int)(100 * position / inpos);
|
||||
int ratio = 0;
|
||||
if (inpos != 0)
|
||||
{
|
||||
ratio = (int)(100 * position / inpos);
|
||||
}
|
||||
char temp[512];
|
||||
sprintf(temp, "%i of %i blocks. compression ratio %i%%", i, header.num_blocks, ratio);
|
||||
callback(temp, (float)i / (float)header.num_blocks, arg);
|
||||
|
@ -42,7 +42,7 @@ class IBlobReader
|
||||
|
||||
private:
|
||||
|
||||
IBlobReader(const IBlobReader& other) {}
|
||||
IBlobReader(const IBlobReader& /*other*/) {}
|
||||
};
|
||||
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "BootManager.h"
|
||||
#include "Config.h"
|
||||
#include "GameListCtrl.h"
|
||||
#include "Blob.h"
|
||||
|
||||
#if USE_XPM_BITMAPS
|
||||
#include "../resources/Flag_Europe.xpm"
|
||||
@ -45,6 +46,7 @@ EVT_LIST_COL_END_DRAG(LIST_CTRL, CGameListCtrl::OnColEndDrag)
|
||||
EVT_MENU(IDM_EDITPATCHFILE, CGameListCtrl::OnEditPatchFile)
|
||||
EVT_MENU(IDM_OPENCONTAININGFOLDER, CGameListCtrl::OnOpenContainingFolder)
|
||||
EVT_MENU(IDM_SETDEFAULTGCM, CGameListCtrl::OnSetDefaultGCM)
|
||||
EVT_MENU(IDM_COMPRESSGCM, CGameListCtrl::OnCompressGCM)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
CGameListCtrl::CGameListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
|
||||
@ -344,6 +346,14 @@ void CGameListCtrl::OnRightClick(wxMouseEvent& event)
|
||||
popupMenu.Append(IDM_EDITPATCHFILE, wxString::FromAscii(menu_text.c_str())); //Pretty much everything in wxwidgets is a wxString, try to convert to those first!
|
||||
popupMenu.Append(IDM_OPENCONTAININGFOLDER, wxString::FromAscii("Open &containing folder"));
|
||||
popupMenu.Append(IDM_SETDEFAULTGCM, wxString::FromAscii("Set as &default ISO"));
|
||||
|
||||
/* F|RES: compression doesn't work and will be rewritten ... if it is done reactivated this code the gui is ready :D
|
||||
if (selected_iso->IsCompressed())
|
||||
popupMenu.Append(IDM_COMPRESSGCM, wxString::FromAscii("Decompress ISO... (UNTESTED)"));
|
||||
else
|
||||
popupMenu.Append(IDM_COMPRESSGCM, wxString::FromAscii("Compress ISO... (UNTESTED)"));
|
||||
*/
|
||||
|
||||
PopupMenu(&popupMenu);
|
||||
}
|
||||
}
|
||||
@ -391,6 +401,79 @@ void CGameListCtrl::OnSetDefaultGCM(wxCommandEvent& WXUNUSED (event)) {
|
||||
SConfig::GetInstance().SaveSettings();
|
||||
}
|
||||
|
||||
void CGameListCtrl::CompressCB(const char* text, float percent, void* arg)
|
||||
{
|
||||
wxProgressDialog* pDialog = (wxProgressDialog*)arg;
|
||||
pDialog->Update((int)(percent*1000), wxString::FromAscii(text));
|
||||
}
|
||||
|
||||
void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event)) {
|
||||
const CISOFile *iso = GetSelectedISO();
|
||||
if (!iso)
|
||||
return;
|
||||
|
||||
wxString path;
|
||||
|
||||
if (iso->IsCompressed())
|
||||
{
|
||||
path = wxFileSelector(
|
||||
_T("Select the file to save"),
|
||||
wxEmptyString, wxEmptyString, wxEmptyString,
|
||||
wxString::Format
|
||||
(
|
||||
_T("All GC/Wii ISO files (gcz)|*.gcz|All files (%s)|%s"),
|
||||
wxFileSelectorDefaultWildcardStr,
|
||||
wxFileSelectorDefaultWildcardStr
|
||||
),
|
||||
wxFD_SAVE,
|
||||
this);
|
||||
|
||||
if (!path)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
path = wxFileSelector(
|
||||
_T("Select the file to save"),
|
||||
wxEmptyString, wxEmptyString, wxEmptyString,
|
||||
wxString::Format
|
||||
(
|
||||
_T("All compressed GC/Wii ISO files (gcz)|*.gcz|All files (%s)|%s"),
|
||||
wxFileSelectorDefaultWildcardStr,
|
||||
wxFileSelectorDefaultWildcardStr
|
||||
),
|
||||
wxFD_SAVE,
|
||||
this);
|
||||
|
||||
if (!path)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
wxProgressDialog dialog(_T("Scanning for ISOs"),
|
||||
_T("Scanning..."),
|
||||
1000, // range
|
||||
this, // parent
|
||||
wxPD_APP_MODAL |
|
||||
// wxPD_AUTO_HIDE | -- try this as well
|
||||
wxPD_ELAPSED_TIME |
|
||||
wxPD_ESTIMATED_TIME |
|
||||
wxPD_REMAINING_TIME |
|
||||
wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small
|
||||
);
|
||||
|
||||
dialog.CenterOnParent();
|
||||
dialog.SetSize(wxSize(280, 180));
|
||||
|
||||
if (iso->IsCompressed())
|
||||
DiscIO::DecompressBlobToFile(iso->GetFileName().c_str(), path.c_str(), &CompressCB, &dialog);
|
||||
else
|
||||
DiscIO::CompressFileToBlob(iso->GetFileName().c_str(), path.c_str(), 0, 16384, &CompressCB, &dialog);
|
||||
}
|
||||
|
||||
void CGameListCtrl::OnEditPatchFile(wxCommandEvent& WXUNUSED (event))
|
||||
{
|
||||
const CISOFile *iso = GetSelectedISO();
|
||||
|
@ -69,10 +69,13 @@ class CGameListCtrl : public wxListCtrl
|
||||
void OnEditPatchFile(wxCommandEvent& event);
|
||||
void OnOpenContainingFolder(wxCommandEvent& event);
|
||||
void OnSetDefaultGCM(wxCommandEvent& event);
|
||||
void OnCompressGCM(wxCommandEvent& event);
|
||||
|
||||
virtual bool MSWDrawSubItem(wxPaintDC& rPaintDC, int item, int subitem);
|
||||
|
||||
void AutomaticColumnWidth();
|
||||
|
||||
static void CompressCB(const char* text, float percent, void* arg);
|
||||
};
|
||||
|
||||
|
||||
|
@ -50,6 +50,7 @@ enum
|
||||
IDM_EDITPATCHFILE,
|
||||
IDM_OPENCONTAININGFOLDER,
|
||||
IDM_SETDEFAULTGCM,
|
||||
IDM_COMPRESSGCM,
|
||||
IDM_PLUGIN_OPTIONS,
|
||||
IDM_CONFIG_GFX_PLUGIN,
|
||||
IDM_CONFIG_DSP_PLUGIN,
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "Filesystem.h"
|
||||
#include "BannerLoader.h"
|
||||
#include "FileSearch.h"
|
||||
#include "Blob.h"
|
||||
|
||||
#define DVD_BANNER_WIDTH 96
|
||||
#define DVD_BANNER_HEIGHT 32
|
||||
@ -34,7 +35,8 @@ static u32 g_ImageTemp[DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT];
|
||||
CISOFile::CISOFile(const std::string& _rFileName)
|
||||
: m_FileName(_rFileName),
|
||||
m_FileSize(0),
|
||||
m_Valid(false)
|
||||
m_Valid(false),
|
||||
m_BlobCompressed(false)
|
||||
{
|
||||
DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(_rFileName);
|
||||
|
||||
@ -45,6 +47,7 @@ CISOFile::CISOFile(const std::string& _rFileName)
|
||||
m_FileSize = pVolume->GetSize();
|
||||
m_Name = pVolume->GetName();
|
||||
m_UniqueID = pVolume->GetUniqueID();
|
||||
m_BlobCompressed = DiscIO::IsCompressedBlob(_rFileName.c_str());
|
||||
|
||||
// check if we can get some infos from the banner file too
|
||||
DiscIO::IFileSystem* pFileSystem = DiscIO::CreateFileSystem(*pVolume);
|
||||
|
@ -41,6 +41,8 @@ class CISOFile
|
||||
|
||||
DiscIO::IVolume::ECountry GetCountry() const {return(m_Country);}
|
||||
|
||||
bool IsCompressed() const {return(m_BlobCompressed); }
|
||||
|
||||
u64 GetFileSize() const {return(m_FileSize);}
|
||||
|
||||
const wxImage& GetImage() const {return(m_Image);}
|
||||
@ -65,6 +67,8 @@ class CISOFile
|
||||
wxImage m_Image;
|
||||
|
||||
bool m_Valid;
|
||||
|
||||
bool m_BlobCompressed;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user