diff -r 4bdeec4f279e -r f364b13047ba mainwindow.cpp --- a/mainwindow.cpp Thu Nov 16 10:07:12 2006 +0000 +++ b/mainwindow.cpp Thu Nov 16 13:43:06 2006 +0000 @@ -130,8 +130,6 @@ settings.setValue( p,s); - maxLastMaps=9; - // Create tab widget which holds the maps tabWidget= new QTabWidget (this); connect( tabWidget, SIGNAL( currentChanged( QWidget * ) ), @@ -190,17 +188,6 @@ settings.setValue( "/mapeditor/editmode/useFlagGroups",actionSettingsUseFlagGroups->isOn() ); settings.setValue( "/export/useHideExport",actionSettingsUseHideExport->isOn() ); - QString s; - int maps=lastMaps.count(); - settings.setValue( "/lastMaps/number",maps ); - for (int i=1;i<=maps;i++) - { - s=QString("/lastMaps/map-%1").arg(i); - if (!s.isEmpty() && i<=maxLastMaps) - settings.setValue (s, lastMaps.at(i-1)); - } - - // To make the texteditor save its settings, call the destructor delete (textEditor); @@ -1526,45 +1513,33 @@ actionFormatBackColor->addTo( canvasContextMenu ); // Menu for last opened files - // Read settings initially - QString s; - int j=settings.readNumEntry( "/lastMaps/number",0); - for (int i=1;i<=j;i++) + // Create actions + for (int i = 0; i < MaxRecentFiles; ++i) { - s=settings.value(QString("/lastMaps/map-%1").arg(i),"").toString(); - if (!s.isEmpty() && j<=maxLastMaps) - lastMaps.append(s); - } - setupLastMapsMenu(); - connect( fileLastMapsMenu, SIGNAL( triggered(QAction *) ), this, SLOT( fileLoadLast(QAction*) ) ); + recentFileActs[i] = new QAction(this); + recentFileActs[i]->setVisible(false); + fileLastMapsMenu->addAction(recentFileActs[i]); + connect(recentFileActs[i], SIGNAL(triggered()), + this, SLOT(fileLoadRecent())); + } + setupRecentMapsMenu(); } -void Main::setupLastMapsMenu() +void Main::setupRecentMapsMenu() { - // Remove double entries - QStringList::Iterator it=lastMaps.begin(); - QStringList::Iterator jt; - while (it!=lastMaps.end() ) - { - jt=it; - ++jt; - while (jt!=lastMaps.end() ) - { - if (*it == *jt) - jt=lastMaps.remove(jt); - else - jt++; - } - it++; - } - - // Limit length of list to maxLastMaps - while ((int)(lastMaps.count()) > maxLastMaps) lastMaps.pop_back(); - - // build Menu from lastMaps string list - fileLastMapsMenu->clear(); - for (it = lastMaps.begin(); it != lastMaps.end(); ++it ) - fileLastMapsMenu->addAction (*it ); + QStringList files = settings.value("/mainwindow/recentFileList").toStringList(); + + int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles); + + for (int i = 0; i < numRecentFiles; ++i) { + //QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i])); + QString text = tr("&%1 %2").arg(i + 1).arg(files[i]); + recentFileActs[i]->setText(text); + recentFileActs[i]->setData(files[i]); + recentFileActs[i]->setVisible(true); + } + for (int j = numRecentFiles; j < MaxRecentFiles; ++j) + recentFileActs[j]->setVisible(false); } void Main::hideEvent (QHideEvent * ) @@ -1853,8 +1828,7 @@ { // Only append to lastMaps if not loaded from a tmpDir // e.g. imported bookmarks are in a tmpDir - lastMaps.prepend(me->getFilePath() ); - setupLastMapsMenu(); + addRecentMap(me->getFilePath() ); } actionFilePrint->setEnabled (true); } @@ -1911,9 +1885,25 @@ fileLoad (NewMap); } -void Main::fileLoadLast(QAction *a) +void Main::fileLoadRecent() { - fileLoad(lastMaps.at(fileLastMapsMenu->actions().indexOf(a)) ,NewMap); + QAction *action = qobject_cast(sender()); + if (action) + fileLoad (action->data().toString(), NewMap); +} + +void Main::addRecentMap (const QString &fileName) +{ + + QStringList files = settings.value("/mainwindow/recentFileList").toStringList(); + files.removeAll(fileName); + files.prepend(fileName); + while (files.size() > MaxRecentFiles) + files.removeLast(); + + settings.setValue("/mainwindow/recentFileList", files); + + setupRecentMapsMenu(); } void Main::fileSave(const SaveMode &savemode) @@ -2024,8 +2014,7 @@ statusBar()->message( tr("Saved %1").arg(me->getFilePath()), statusbarTime ); - lastMaps.prepend(me->getFilePath() ); - setupLastMapsMenu(); + addRecentMap (me->getFilePath() ); } else statusBar()->message( tr("Couldn't save ").arg(me->getFilePath()),