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:
parent
c5ef41d3b4
commit
e49c85af1c
@ -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* )
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user