- int i;
-
- // Check we don't already have this file
- for (i = 0; i < m_fileHistoryN; i++)
- {
- if ( m_fileHistory[i] && (file == m_fileHistory[i]) )
- {
- // we do have it, move it to the top of the history
- RemoveFileFromHistory (i);
- AddFileToHistory (file);
- return;
- }
- }
-
- // if we already have a full history, delete the one at the end
- if ( m_fileMaxFiles == m_fileHistoryN )
- {
- RemoveFileFromHistory (m_fileHistoryN - 1);
- AddFileToHistory (file);
- return;
- }
-
- // Add to the project file history:
- // Move existing files (if any) down so we can insert file at beginning.
- if (m_fileHistoryN < m_fileMaxFiles)
- {
- wxNode* node = m_fileMenus.First();
- while (node)
- {
- wxMenu* menu = (wxMenu*) node->Data();
- if (m_fileHistoryN == 0)
- menu->AppendSeparator();
- menu->Append(wxID_FILE1+m_fileHistoryN, _("[EMPTY]"));
- node = node->Next();
- }
- m_fileHistoryN ++;
- }
- // Shuffle filenames down
- for (i = (m_fileHistoryN-1); i > 0; i--)
- {
- m_fileHistory[i] = m_fileHistory[i-1];
- }
- m_fileHistory[0] = copystring(file);
-
- // this is the directory of the last opened file
- wxString pathCurrent;
- wxSplitPath( m_fileHistory[0], &pathCurrent, NULL, NULL );
- for (i = 0; i < m_fileHistoryN; i++)
- {
- if ( m_fileHistory[i] )
- {
- // if in same directory just show the filename; otherwise the full
- // path
- wxString pathInMenu, path, filename, ext;
- wxSplitPath( m_fileHistory[i], &path, &filename, &ext );
- if ( path == pathCurrent )
- {
- pathInMenu = filename;
- if ( !ext.empty() )
- pathInMenu = pathInMenu + wxFILE_SEP_EXT + ext;
- }
- else
- {
- // absolute path; could also set relative path
- pathInMenu = m_fileHistory[i];
- }
-
- wxString buf;
- buf.Printf(s_MRUEntryFormat, i + 1, pathInMenu.c_str());
- wxNode* node = m_fileMenus.First();
- while (node)
- {
- wxMenu* menu = (wxMenu*) node->Data();
- menu->SetLabel(wxID_FILE1 + i, buf);
- node = node->Next();
- }
- }
- }
-}