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
This commit is contained in:
Vadim Zeitlin 2003-03-02 23:35:17 +00:00
parent c5ef41d3b4
commit e49c85af1c
4 changed files with 64 additions and 49 deletions

View File

@ -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* )

View File

@ -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.

View File

@ -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)
};

View File

@ -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);
}
}
}