mainwindow.cpp
changeset 401 f364b13047ba
parent 398 d42881c25fb6
child 404 53efc2562a7d
     1.1 --- a/mainwindow.cpp	Thu Nov 16 10:07:12 2006 +0000
     1.2 +++ b/mainwindow.cpp	Thu Nov 16 13:43:06 2006 +0000
     1.3 @@ -130,8 +130,6 @@
     1.4  		settings.setValue( p,s);
     1.5  
     1.6  	
     1.7 -	maxLastMaps=9;
     1.8 -
     1.9  	// Create tab widget which holds the maps
    1.10  	tabWidget= new QTabWidget (this);
    1.11  	connect( tabWidget, SIGNAL( currentChanged( QWidget * ) ), 
    1.12 @@ -190,17 +188,6 @@
    1.13  	settings.setValue( "/mapeditor/editmode/useFlagGroups",actionSettingsUseFlagGroups->isOn() );
    1.14  	settings.setValue( "/export/useHideExport",actionSettingsUseHideExport->isOn() );
    1.15  
    1.16 -	QString s;
    1.17 -	int maps=lastMaps.count();
    1.18 -	settings.setValue( "/lastMaps/number",maps );
    1.19 -	for (int i=1;i<=maps;i++)
    1.20 -	{
    1.21 -		s=QString("/lastMaps/map-%1").arg(i);
    1.22 -		if (!s.isEmpty() && i<=maxLastMaps) 
    1.23 -			settings.setValue (s, lastMaps.at(i-1));
    1.24 -	}
    1.25 -
    1.26 -
    1.27  	// To make the texteditor save its settings, call the destructor
    1.28  	delete (textEditor);
    1.29  
    1.30 @@ -1526,45 +1513,33 @@
    1.31  	actionFormatBackColor->addTo( canvasContextMenu );
    1.32  
    1.33  	// Menu for last opened files
    1.34 -	// Read settings initially
    1.35 -	QString s;
    1.36 -	int j=settings.readNumEntry( "/lastMaps/number",0);
    1.37 -	for (int i=1;i<=j;i++)
    1.38 +	// Create actions
    1.39 +	for (int i = 0; i < MaxRecentFiles; ++i) 
    1.40  	{
    1.41 -		s=settings.value(QString("/lastMaps/map-%1").arg(i),"").toString();
    1.42 -		if (!s.isEmpty() && j<=maxLastMaps) 
    1.43 -			lastMaps.append(s);
    1.44 -	}
    1.45 -	setupLastMapsMenu();
    1.46 -	connect( fileLastMapsMenu, SIGNAL( triggered(QAction *) ), this, SLOT( fileLoadLast(QAction*) ) );
    1.47 +        recentFileActs[i] = new QAction(this);
    1.48 +        recentFileActs[i]->setVisible(false);
    1.49 +        fileLastMapsMenu->addAction(recentFileActs[i]);
    1.50 +        connect(recentFileActs[i], SIGNAL(triggered()),
    1.51 +                this, SLOT(fileLoadRecent()));
    1.52 +    }
    1.53 +	setupRecentMapsMenu();
    1.54  }
    1.55  
    1.56 -void Main::setupLastMapsMenu()
    1.57 +void Main::setupRecentMapsMenu()
    1.58  {
    1.59 -	// Remove double entries
    1.60 -	QStringList::Iterator it=lastMaps.begin();
    1.61 -	QStringList::Iterator jt;
    1.62 -	while (it!=lastMaps.end() )
    1.63 -	{
    1.64 -		jt=it;
    1.65 -		++jt;
    1.66 -		while (jt!=lastMaps.end() )
    1.67 -		{
    1.68 -			if (*it == *jt)		
    1.69 -				jt=lastMaps.remove(jt);
    1.70 -			else	
    1.71 -				jt++;
    1.72 -		}
    1.73 -		it++;
    1.74 -	}	
    1.75 -
    1.76 -	// Limit length of list to maxLastMaps
    1.77 -	while ((int)(lastMaps.count()) > maxLastMaps) lastMaps.pop_back();
    1.78 -	
    1.79 -	// build Menu from lastMaps string list
    1.80 -	fileLastMapsMenu->clear();
    1.81 -	for (it = lastMaps.begin(); it != lastMaps.end(); ++it ) 
    1.82 -		fileLastMapsMenu->addAction (*it );
    1.83 +    QStringList files = settings.value("/mainwindow/recentFileList").toStringList();
    1.84 +
    1.85 +    int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles);
    1.86 +
    1.87 +    for (int i = 0; i < numRecentFiles; ++i) {
    1.88 +        //QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i]));
    1.89 +        QString text = tr("&%1 %2").arg(i + 1).arg(files[i]);
    1.90 +        recentFileActs[i]->setText(text);
    1.91 +        recentFileActs[i]->setData(files[i]);
    1.92 +        recentFileActs[i]->setVisible(true);
    1.93 +    }
    1.94 +    for (int j = numRecentFiles; j < MaxRecentFiles; ++j)
    1.95 +        recentFileActs[j]->setVisible(false);
    1.96  }
    1.97  
    1.98  void Main::hideEvent (QHideEvent * )
    1.99 @@ -1853,8 +1828,7 @@
   1.100  				{
   1.101  					// Only append to lastMaps if not loaded from a tmpDir
   1.102  					// e.g. imported bookmarks are in a tmpDir
   1.103 -					lastMaps.prepend(me->getFilePath() );
   1.104 -					setupLastMapsMenu();
   1.105 +					addRecentMap(me->getFilePath() );
   1.106  				}
   1.107  				actionFilePrint->setEnabled (true);
   1.108  			}	
   1.109 @@ -1911,9 +1885,25 @@
   1.110  	fileLoad (NewMap);
   1.111  }
   1.112  
   1.113 -void Main::fileLoadLast(QAction *a)
   1.114 +void Main::fileLoadRecent()
   1.115  {
   1.116 -	fileLoad(lastMaps.at(fileLastMapsMenu->actions().indexOf(a)) ,NewMap);
   1.117 +    QAction *action = qobject_cast<QAction *>(sender());
   1.118 +    if (action)
   1.119 +        fileLoad (action->data().toString(), NewMap);
   1.120 +}
   1.121 +
   1.122 +void Main::addRecentMap (const QString &fileName)
   1.123 +{
   1.124 +
   1.125 +    QStringList files = settings.value("/mainwindow/recentFileList").toStringList();
   1.126 +    files.removeAll(fileName);
   1.127 +    files.prepend(fileName);
   1.128 +    while (files.size() > MaxRecentFiles)
   1.129 +        files.removeLast();
   1.130 +
   1.131 +    settings.setValue("/mainwindow/recentFileList", files);
   1.132 +
   1.133 +	setupRecentMapsMenu();
   1.134  }
   1.135  
   1.136  void Main::fileSave(const SaveMode &savemode)
   1.137 @@ -2024,8 +2014,7 @@
   1.138  		statusBar()->message( 
   1.139  			tr("Saved  %1").arg(me->getFilePath()), 
   1.140  			statusbarTime );
   1.141 -		lastMaps.prepend(me->getFilePath() );
   1.142 -		setupLastMapsMenu();
   1.143 +		addRecentMap (me->getFilePath() );
   1.144  	} else		
   1.145  		statusBar()->message( 
   1.146  			tr("Couldn't save ").arg(me->getFilePath()),