X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cf41e1a4d57f8a332f2f1c6660a18a3c2eb144ba..1eb9ddb9f8136af0e13a767762bb52f6c23bbcd7:/src/common/docview.cpp?ds=sidebyside diff --git a/src/common/docview.cpp b/src/common/docview.cpp index cb9efb80c8..a88869b84f 100644 --- a/src/common/docview.cpp +++ b/src/common/docview.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem +// Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -43,6 +43,8 @@ #include "wx/log.h" #endif +#include "wx/ffile.h" + #ifdef __WXMAC__ #include "wx/filename.h" #endif @@ -1265,13 +1267,13 @@ void wxDocManager::AddFileToHistory(const wxString& file) m_fileHistory->AddFileToHistory(file); } -void wxDocManager::RemoveFileFromHistory(int i) +void wxDocManager::RemoveFileFromHistory(size_t i) { if (m_fileHistory) m_fileHistory->RemoveFileFromHistory(i); } -wxString wxDocManager::GetHistoryFile(int i) const +wxString wxDocManager::GetHistoryFile(size_t i) const { wxString histFile; @@ -1319,7 +1321,7 @@ void wxDocManager::FileHistoryAddFilesToMenu() m_fileHistory->AddFilesToMenu(); } -int wxDocManager::GetNoHistoryFiles() const +size_t wxDocManager::GetNoHistoryFiles() const { if (m_fileHistory) return m_fileHistory->GetNoHistoryFiles(); @@ -1906,16 +1908,17 @@ void wxDocPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, in // File history processor // ---------------------------------------------------------------------------- -wxFileHistory::wxFileHistory(int maxFiles) +wxFileHistory::wxFileHistory(size_t maxFiles, wxWindowID idBase) { m_fileMaxFiles = maxFiles; + m_idBase = idBase; m_fileHistoryN = 0; m_fileHistory = new wxChar *[m_fileMaxFiles]; } wxFileHistory::~wxFileHistory() { - int i; + size_t i; for (i = 0; i < m_fileHistoryN; i++) delete[] m_fileHistory[i]; delete[] m_fileHistory; @@ -1924,7 +1927,7 @@ wxFileHistory::~wxFileHistory() // File history management void wxFileHistory::AddFileToHistory(const wxString& file) { - int i; + size_t i; // Check we don't already have this file for (i = 0; i < m_fileHistoryN; i++) @@ -1958,7 +1961,7 @@ void wxFileHistory::AddFileToHistory(const wxString& file) { menu->AppendSeparator(); } - menu->Append(wxID_FILE1+m_fileHistoryN, _("[EMPTY]")); + menu->Append(m_idBase+m_fileHistoryN, _("[EMPTY]")); node = node->GetNext(); } m_fileHistoryN ++; @@ -1999,46 +2002,49 @@ void wxFileHistory::AddFileToHistory(const wxString& file) while (node) { wxMenu* menu = (wxMenu*) node->GetData(); - menu->SetLabel(wxID_FILE1 + i, buf); + menu->SetLabel(m_idBase + i, buf); node = node->GetNext(); } } } } -void wxFileHistory::RemoveFileFromHistory(int i) +void wxFileHistory::RemoveFileFromHistory(size_t i) { wxCHECK_RET( i < m_fileHistoryN, wxT("invalid index in wxFileHistory::RemoveFileFromHistory") ); - // delete the element from the array (could use memmove() too...) - delete [] m_fileHistory[i]; + // delete the element from the array (could use memmove() too...) + delete [] m_fileHistory[i]; - int j; - for ( j = i; j < m_fileHistoryN - 1; j++ ) - { - m_fileHistory[j] = m_fileHistory[j + 1]; - } + size_t j; + for ( j = i; j < m_fileHistoryN - 1; j++ ) + { + m_fileHistory[j] = m_fileHistory[j + 1]; + } wxNode* node = m_fileMenus.GetFirst(); while ( node ) { - wxMenu* menu = (wxMenu*) node->GetData(); + wxMenu* menu = (wxMenu*) node->GetData(); - // shuffle filenames up - wxString buf; - for ( j = i; j < m_fileHistoryN - 1; j++ ) - { - buf.Printf(s_MRUEntryFormat, j + 1, m_fileHistory[j]); - menu->SetLabel(wxID_FILE1 + j, buf); - } + // shuffle filenames up + wxString buf; + for ( j = i; j < m_fileHistoryN - 1; j++ ) + { + buf.Printf(s_MRUEntryFormat, j + 1, m_fileHistory[j]); + menu->SetLabel(m_idBase + j, buf); + } - node = node->GetNext(); + node = node->GetNext(); // delete the last menu item which is unused now - if (menu->FindItem(wxID_FILE1 + m_fileHistoryN - 1)) - menu->Delete(wxID_FILE1 + m_fileHistoryN - 1); + wxWindowID lastItemId = m_idBase + m_fileHistoryN - 1; + if (menu->FindItem(lastItemId)) + { + menu->Delete(lastItemId); + } // delete the last separator too if no more files are left if ( m_fileHistoryN == 1 ) @@ -2060,7 +2066,7 @@ void wxFileHistory::RemoveFileFromHistory(int i) m_fileHistoryN--; } -wxString wxFileHistory::GetHistoryFile(int i) const +wxString wxFileHistory::GetHistoryFile(size_t i) const { wxString s; if ( i < m_fileHistoryN ) @@ -2105,7 +2111,7 @@ void wxFileHistory::Load(wxConfigBase& config) void wxFileHistory::Save(wxConfigBase& config) { - int i; + size_t i; for (i = 0; i < m_fileHistoryN; i++) { wxString buf; @@ -2128,14 +2134,14 @@ void wxFileHistory::AddFilesToMenu() menu->AppendSeparator(); } - int i; + size_t i; for (i = 0; i < m_fileHistoryN; i++) { if (m_fileHistory[i]) { wxString buf; buf.Printf(s_MRUEntryFormat, i+1, m_fileHistory[i]); - menu->Append(wxID_FILE1+i, buf); + menu->Append(m_idBase+i, buf); } } node = node->GetNext(); @@ -2152,14 +2158,14 @@ void wxFileHistory::AddFilesToMenu(wxMenu* menu) menu->AppendSeparator(); } - int i; + size_t i; for (i = 0; i < m_fileHistoryN; i++) { if (m_fileHistory[i]) { wxString buf; buf.Printf(s_MRUEntryFormat, i+1, m_fileHistory[i]); - menu->Append(wxID_FILE1+i, buf); + menu->Append(m_idBase+i, buf); } } } @@ -2171,77 +2177,99 @@ void wxFileHistory::AddFilesToMenu(wxMenu* menu) // ---------------------------------------------------------------------------- #if wxUSE_STD_IOSTREAM + bool wxTransferFileToStream(const wxString& filename, wxSTD ostream& stream) { - FILE *fd1; - int ch; - - if ((fd1 = wxFopen (filename.fn_str(), _T("rb"))) == NULL) + wxFFile file(filename, _T("rb")); + if ( !file.IsOpened() ) return FALSE; - while ((ch = getc (fd1)) != EOF) - stream << (unsigned char)ch; + char buf[4096]; + + size_t nRead; + do + { + nRead = file.Read(buf, WXSIZEOF(buf)); + if ( file.Error() ) + return FALSE; + + stream.write(buf, nRead); + if ( !stream ) + return FALSE; + } + while ( !file.Eof() ); - fclose (fd1); return TRUE; } bool wxTransferStreamToFile(wxSTD istream& stream, const wxString& filename) { - FILE *fd1; - int ch; - - if ((fd1 = wxFopen (filename.fn_str(), _T("wb"))) == NULL) - { + wxFFile file(filename, _T("wb")); + if ( !file.IsOpened() ) return FALSE; - } - while (!stream.eof()) + char buf[4096]; + do { - ch = stream.get(); - if (!stream.eof()) - putc (ch, fd1); + stream.read(buf, WXSIZEOF(buf)); + if ( !stream.bad() ) // fail may be set on EOF, don't use operator!() + { + if ( !file.Write(buf, stream.gcount()) ) + return FALSE; + } } - fclose (fd1); + while ( !stream.eof() ); + return TRUE; } -#else + +#else // !wxUSE_STD_IOSTREAM + bool wxTransferFileToStream(const wxString& filename, wxOutputStream& stream) { - FILE *fd1; - int ch; - - if ((fd1 = wxFopen (filename, wxT("rb"))) == NULL) + wxFFile file(filename, _T("rb")); + if ( !file.IsOpened() ) return FALSE; - while ((ch = getc (fd1)) != EOF) - stream.PutC((char) ch); + char buf[4096]; + + size_t nRead; + do + { + nRead = file.Read(buf, WXSIZEOF(buf)); + if ( file.Error() ) + return FALSE; + + stream.Write(buf, nRead); + if ( !stream ) + return FALSE; + } + while ( !file.Eof() ); - fclose (fd1); return TRUE; } bool wxTransferStreamToFile(wxInputStream& stream, const wxString& filename) { - FILE *fd1; - char ch; - - if ((fd1 = wxFopen (filename, wxT("wb"))) == NULL) - { + wxFFile file(filename, _T("wb")); + if ( !file.IsOpened() ) return FALSE; - } - int len = stream.GetSize(); - // TODO: is this the correct test for EOF? - while (stream.TellI() < (len - 1)) + char buf[4096]; + do { - ch = stream.GetC(); - putc (ch, fd1); + stream.Read(buf, WXSIZEOF(buf)); + + const size_t nRead = stream.LastRead(); + if ( !nRead || !file.Write(buf, nRead) ) + return FALSE; } - fclose (fd1); + while ( !stream.Eof() ); + return TRUE; } -#endif + +#endif // wxUSE_STD_IOSTREAM/!wxUSE_STD_IOSTREAM #endif // wxUSE_DOC_VIEW_ARCHITECTURE