From e49c85af1c3166c9cdfdc99b4d9d5103c3c1bd61 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 2 Mar 2003 23:35:17 +0000 Subject: [PATCH] added possibility to use several wxFileHistories (patch 685876) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19443 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 3 ++ docs/latex/wx/filehist.tex | 17 +++++++---- include/wx/docview.h | 23 ++++++++------- src/common/docview.cpp | 70 ++++++++++++++++++++++++---------------------- 4 files changed, 64 insertions(+), 49 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 443e730..37a9230 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -39,6 +39,9 @@ All GUI ports: - support wxListCtrl columns alignment for all platforms and not just MSW - added wxToolBar Add/InsertTool(tool) (Janusz Piwowarski) - WXR resources can now be used in Unicode builds +- it is now possible to use several wxFileHistory objects in the same menu + by giving them different base IDs (Dimitri Schoolwerth) + - changed to type-safe wxSizerItemList for wxSizer child items Deprecated: wxSizer::Remove( wxWindow* ) diff --git a/docs/latex/wx/filehist.tex b/docs/latex/wx/filehist.tex index 2804384..e92d9a8 100644 --- a/docs/latex/wx/filehist.tex +++ b/docs/latex/wx/filehist.tex @@ -30,13 +30,13 @@ files. \membersection{wxFileHistory::m\_fileHistoryN} -\member{int}{m\_fileHistoryN} +\member{size_t}{m\_fileHistoryN} The number of files stored in the history array. \membersection{wxFileHistory::m\_fileMaxFiles} -\member{int}{m\_fileMaxFiles} +\member{size_t}{m\_fileMaxFiles} The maximum number of files to be stored and displayed on the menu. @@ -48,10 +48,15 @@ The file menu used to display the file history list (if enabled). \membersection{wxFileHistory::wxFileHistory} -\func{}{wxFileHistory}{\param{int}{ maxFiles = 9}} +\func{}{wxFileHistory}{\param{size_t}{ maxFiles = 9}, \param{wxWindowID}{ idBase = wxID_FILE1}} Constructor. Pass the maximum number of files that should be stored and displayed. +idBase defaults to wxID_FILE1 and represents the id given to the first history menu item. +Since menu items can't share the same ID you should change idBase (To one of your own +defined IDs) when using more than one wxFileHistory in your application. + + \membersection{wxFileHistory::\destruct{wxFileHistory}} \func{}{\destruct{wxFileHistory}}{\void} @@ -76,19 +81,19 @@ Appends the files in the history list, to the given menu only. \membersection{wxFileHistory::GetHistoryFile}\label{wxfilehistorygethistoryfile} -\constfunc{wxString}{GetHistoryFile}{\param{int}{ index}} +\constfunc{wxString}{GetHistoryFile}{\param{size_t}{ index}} Returns the file at this index (zero-based). \membersection{wxFileHistory::GetMaxFiles} -\constfunc{int}{GetMaxFiles}{\void} +\constfunc{size_t}{GetMaxFiles}{\void} Returns the maximum number of files that can be stored. \membersection{wxFileHistory::GetNoHistoryFiles} -\constfunc{int}{GetNoHistoryFiles}{\void} +\constfunc{size_t}{GetNoHistoryFiles}{\void} Returns the number of files currently stored in the file history. diff --git a/include/wx/docview.h b/include/wx/docview.h index ce8b940..8c8bf6f 100644 --- a/include/wx/docview.h +++ b/include/wx/docview.h @@ -395,9 +395,9 @@ public: // File history management virtual void AddFileToHistory(const wxString& file); - virtual void RemoveFileFromHistory(int i); - virtual int GetNoHistoryFiles() const; - virtual wxString GetHistoryFile(int i) const; + virtual void RemoveFileFromHistory(size_t i); + virtual size_t GetNoHistoryFiles() const; + virtual wxString GetHistoryFile(size_t i) const; virtual void FileHistoryUseMenu(wxMenu *menu); virtual void FileHistoryRemoveMenu(wxMenu *menu); #if wxUSE_CONFIG @@ -535,12 +535,12 @@ private: class WXDLLEXPORT wxFileHistory : public wxObject { public: - wxFileHistory(int maxFiles = 9); + wxFileHistory(size_t maxFiles = 9, wxWindowID idBase = wxID_FILE1); ~wxFileHistory(); // Operations virtual void AddFileToHistory(const wxString& file); - virtual void RemoveFileFromHistory(int i); + virtual void RemoveFileFromHistory(size_t i); virtual int GetMaxFiles() const { return m_fileMaxFiles; } virtual void UseMenu(wxMenu *menu); @@ -556,11 +556,11 @@ public: virtual void AddFilesToMenu(wxMenu* menu); // Single menu // Accessors - virtual wxString GetHistoryFile(int i) const; + virtual wxString GetHistoryFile(size_t i) const; // A synonym for GetNoHistoryFiles - virtual int GetCount() const { return m_fileHistoryN; } - int GetNoHistoryFiles() const { return m_fileHistoryN; } + virtual size_t GetCount() const { return m_fileHistoryN; } + size_t GetNoHistoryFiles() const { return m_fileHistoryN; } wxList& GetMenus() const { return (wxList&) m_fileMenus; } @@ -568,13 +568,16 @@ protected: // Last n files wxChar** m_fileHistory; // Number of files saved - int m_fileHistoryN; + size_t m_fileHistoryN; // Menus to maintain (may need several for an MDI app) wxList m_fileMenus; // Max files to maintain - int m_fileMaxFiles; + size_t m_fileMaxFiles; private: + // The ID of the first history menu item (Doesn't have to be wxID_FILE1) + wxWindowID m_idBase; + DECLARE_DYNAMIC_CLASS(wxFileHistory) DECLARE_NO_COPY_CLASS(wxFileHistory) }; diff --git a/src/common/docview.cpp b/src/common/docview.cpp index 2081dbc..125c5a8 100644 --- a/src/common/docview.cpp +++ b/src/common/docview.cpp @@ -1267,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; @@ -1321,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(); @@ -1908,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; @@ -1926,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++) @@ -1960,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 ++; @@ -2001,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 ) @@ -2062,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 ) @@ -2107,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; @@ -2130,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(); @@ -2154,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); } } } -- 2.7.4