fixed warnings about truncating 64 bit integers

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2005-09-25 23:57:38 +00:00
parent 2cfcf22d47
commit ec52467188
2 changed files with 117 additions and 75 deletions

View File

@ -45,6 +45,39 @@ IMPLEMENT_DYNAMIC_CLASS(wxTIFFHandler,wxImageHandler)
#if wxUSE_STREAMS
// helper to translate our, possibly 64 bit, wxFileOffset to TIFF, always 32
// bit, toff_t
static toff_t wxFileOffsetToTIFF(wxFileOffset ofs)
{
if ( ofs == wxInvalidOffset )
return (toff_t)-1;
toff_t tofs = wx_truncate_cast(toff_t, ofs);
wxCHECK_MSG( tofs == ofs, (toff_t)-1,
_T("TIFF library doesn't support large files") );
return tofs;
}
// another helper to convert standard seek mode to our
static wxSeekMode wxSeekModeFromTIFF(int whence)
{
switch ( whence )
{
case SEEK_SET:
return wxFromStart;
case SEEK_CUR:
return wxFromCurrent;
case SEEK_END:
return wxFromEnd;
default:
return wxFromCurrent;
}
}
extern "C"
{
@ -76,32 +109,18 @@ toff_t TIFFLINKAGEMODE
_tiffSeekIProc(thandle_t handle, toff_t off, int whence)
{
wxInputStream *stream = (wxInputStream*) handle;
wxSeekMode mode;
switch (whence)
{
case SEEK_SET: mode = wxFromStart; break;
case SEEK_CUR: mode = wxFromCurrent; break;
case SEEK_END: mode = wxFromEnd; break;
default: mode = wxFromCurrent; break;
}
return (toff_t)stream->SeekI( (wxFileOffset)off, mode );
return wxFileOffsetToTIFF(stream->SeekI((wxFileOffset)off,
wxSeekModeFromTIFF(whence)));
}
toff_t TIFFLINKAGEMODE
_tiffSeekOProc(thandle_t handle, toff_t off, int whence)
{
wxOutputStream *stream = (wxOutputStream*) handle;
wxSeekMode mode;
switch (whence)
{
case SEEK_SET: mode = wxFromStart; break;
case SEEK_CUR: mode = wxFromCurrent; break;
case SEEK_END: mode = wxFromEnd; break;
default: mode = wxFromCurrent; break;
}
return (toff_t)stream->SeekO( (wxFileOffset)off, mode );
return wxFileOffsetToTIFF(stream->SeekO((wxFileOffset)off,
wxSeekModeFromTIFF(whence)));
}
int TIFFLINKAGEMODE

View File

@ -30,6 +30,7 @@
#include "wx/stattext.h"
#include "wx/debug.h"
#include "wx/log.h"
#include "wx/longlong.h"
#include "wx/intl.h"
#include "wx/msgdlg.h"
#include "wx/sizer.h"
@ -79,56 +80,83 @@
// ----------------------------------------------------------------------------
static
int wxCALLBACK wxFileDataNameCompare( long data1, long data2, long data)
int wxCALLBACK wxFileDataNameCompare( long data1, long data2, long sortOrder)
{
wxFileData *fd1 = (wxFileData*)data1;
wxFileData *fd2 = (wxFileData*)data2;
if (fd1->GetFileName() == wxT("..")) return -data;
if (fd2->GetFileName() == wxT("..")) return data;
if (fd1->IsDir() && !fd2->IsDir()) return -data;
if (fd2->IsDir() && !fd1->IsDir()) return data;
return data*wxStrcmp( fd1->GetFileName(), fd2->GetFileName() );
wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1);
wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2);
if (fd1->GetFileName() == wxT(".."))
return -sortOrder;
if (fd2->GetFileName() == wxT(".."))
return sortOrder;
if (fd1->IsDir() && !fd2->IsDir())
return -sortOrder;
if (fd2->IsDir() && !fd1->IsDir())
return sortOrder;
return sortOrder*wxStrcmp( fd1->GetFileName(), fd2->GetFileName() );
}
static
int wxCALLBACK wxFileDataSizeCompare( long data1, long data2, long data)
int wxCALLBACK wxFileDataSizeCompare(long data1, long data2, long sortOrder)
{
wxFileData *fd1 = (wxFileData*)data1;
wxFileData *fd2 = (wxFileData*)data2;
if (fd1->GetFileName() == wxT("..")) return -data;
if (fd2->GetFileName() == wxT("..")) return data;
if (fd1->IsDir() && !fd2->IsDir()) return -data;
if (fd2->IsDir() && !fd1->IsDir()) return data;
if (fd1->IsLink() && !fd2->IsLink()) return -data;
if (fd2->IsLink() && !fd1->IsLink()) return data;
return data*(fd1->GetSize() - fd2->GetSize());
wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1);
wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2);
if (fd1->GetFileName() == wxT(".."))
return -sortOrder;
if (fd2->GetFileName() == wxT(".."))
return sortOrder;
if (fd1->IsDir() && !fd2->IsDir())
return -sortOrder;
if (fd2->IsDir() && !fd1->IsDir())
return sortOrder;
if (fd1->IsLink() && !fd2->IsLink())
return -sortOrder;
if (fd2->IsLink() && !fd1->IsLink())
return sortOrder;
return fd1->GetSize() > fd2->GetSize() ? sortOrder : -sortOrder;
}
static
int wxCALLBACK wxFileDataTypeCompare( long data1, long data2, long data)
int wxCALLBACK wxFileDataTypeCompare(long data1, long data2, long sortOrder)
{
wxFileData *fd1 = (wxFileData*)data1;
wxFileData *fd2 = (wxFileData*)data2;
if (fd1->GetFileName() == wxT("..")) return -data;
if (fd2->GetFileName() == wxT("..")) return data;
if (fd1->IsDir() && !fd2->IsDir()) return -data;
if (fd2->IsDir() && !fd1->IsDir()) return data;
if (fd1->IsLink() && !fd2->IsLink()) return -data;
if (fd2->IsLink() && !fd1->IsLink()) return data;
return data*wxStrcmp( fd1->GetFileType(), fd2->GetFileType() );
wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1);
wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2);
if (fd1->GetFileName() == wxT(".."))
return -sortOrder;
if (fd2->GetFileName() == wxT(".."))
return sortOrder;
if (fd1->IsDir() && !fd2->IsDir())
return -sortOrder;
if (fd2->IsDir() && !fd1->IsDir())
return sortOrder;
if (fd1->IsLink() && !fd2->IsLink())
return -sortOrder;
if (fd2->IsLink() && !fd1->IsLink())
return sortOrder;
return sortOrder*wxStrcmp( fd1->GetFileType(), fd2->GetFileType() );
}
static
int wxCALLBACK wxFileDataTimeCompare( long data1, long data2, long data)
int wxCALLBACK wxFileDataTimeCompare(long data1, long data2, long sortOrder)
{
wxFileData *fd1 = (wxFileData*)data1;
wxFileData *fd2 = (wxFileData*)data2;
if (fd1->GetFileName() == wxT("..")) return -data;
if (fd2->GetFileName() == wxT("..")) return data;
if (fd1->IsDir() && !fd2->IsDir()) return -data;
if (fd2->IsDir() && !fd1->IsDir()) return data;
wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1);
wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2);
return fd1->GetDateTime().IsLaterThan(fd2->GetDateTime()) ? int(data) : -int(data);
if (fd1->GetFileName() == wxT(".."))
return -sortOrder;
if (fd2->GetFileName() == wxT(".."))
return sortOrder;
if (fd1->IsDir() && !fd2->IsDir())
return -sortOrder;
if (fd2->IsDir() && !fd1->IsDir())
return sortOrder;
return fd1->GetDateTime().IsLaterThan(fd2->GetDateTime()) ? sortOrder : -sortOrder;
}
#if defined(__DOS__) || defined(__WINDOWS__) || defined (__OS2__)
@ -221,7 +249,7 @@ void wxFileData::ReadData()
}
}
m_size = (long)buff.st_size;
m_size = buff.st_size;
m_dateTime = buff.st_mtime;
@ -281,7 +309,8 @@ wxString wxFileData::GetHint() const
else if (IsDrive())
s += _("<DRIVE>");
else // plain file
s += wxString::Format( _("%ld bytes"), m_size );
s += wxString::Format(_("%ld bytes"),
wxLongLong(m_size).ToString().c_str());
s += wxT(' ');
@ -306,7 +335,7 @@ wxString wxFileData::GetEntry( fileListFieldType num ) const
case FileList_Size:
if (!IsDir() && !IsLink() && !IsDrive())
s.Printf(_T("%ld"), m_size);
s = wxLongLong(m_size).ToString();
break;
case FileList_Type:
@ -792,35 +821,29 @@ void wxFileCtrl::OnListColClick( wxListEvent &event )
SortItems(m_sort_field, m_sort_foward);
}
void wxFileCtrl::SortItems(wxFileData::fileListFieldType field, bool foward)
void wxFileCtrl::SortItems(wxFileData::fileListFieldType field, bool forward)
{
m_sort_field = field;
m_sort_foward = foward;
long sort_dir = foward ? 1 : -1;
m_sort_foward = forward;
const long sort_dir = forward ? 1 : -1;
switch (m_sort_field)
{
case wxFileData::FileList_Name :
{
wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataNameCompare, sort_dir);
wxListCtrl::SortItems(wxFileDataNameCompare, sort_dir);
break;
}
case wxFileData::FileList_Size :
{
wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataSizeCompare, sort_dir);
wxListCtrl::SortItems(wxFileDataSizeCompare, sort_dir);
break;
}
case wxFileData::FileList_Type :
{
wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataTypeCompare, sort_dir);
break;
}
wxListCtrl::SortItems(wxFileDataTypeCompare, sort_dir);
break;
case wxFileData::FileList_Time :
{
wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataTimeCompare, sort_dir);
break;
}
default : break;
wxListCtrl::SortItems(wxFileDataTimeCompare, sort_dir);
break;
}
}