@@ -119,6 +119,7 @@ MainWindow::MainWindow(QWidget *parent) :
119
119
QAction* act_loop = new QAction (" Loop" , this );
120
120
act_loop->setCheckable (true );
121
121
122
+ // ===== File Edit =====
122
123
123
124
QAction* act_newFile = new QAction (" New" , this );
124
125
act_newFile->setShortcut (QKeySequence::New);
@@ -128,6 +129,23 @@ MainWindow::MainWindow(QWidget *parent) :
128
129
act_openFile->setShortcut (QKeySequence::Open);
129
130
connect (act_openFile, SIGNAL (triggered ()), this , SLOT (open ()));
130
131
132
+
133
+ QAction* act_clearRecentFiles = new QAction (" Clear recent files" , this );
134
+ connect (act_clearRecentFiles, SIGNAL (triggered ()), this , SLOT (clearRecentFiles ()));
135
+
136
+ menu_openRecentFile = new QMenu (" Open Recent" , this );
137
+ for (int i = 0 ; i < maxRecentFile; ++i)
138
+ {
139
+ recentFileActs[i] = new QAction (this );
140
+ recentFileActs[i]->setVisible (false );
141
+ connect (recentFileActs[i], SIGNAL (triggered ()),
142
+ this , SLOT (openRecent ()));
143
+ menu_openRecentFile->addAction (recentFileActs[i]);
144
+ }
145
+ menu_openRecentFile->addSeparator ();
146
+ menu_openRecentFile->addAction (act_clearRecentFiles);
147
+
148
+
131
149
QAction* act_saveFile = new QAction (" Save" , this );
132
150
act_saveFile->setShortcut (QKeySequence::Save);
133
151
connect (act_saveFile, SIGNAL (triggered ()), this , SLOT (save ()));
@@ -154,6 +172,7 @@ MainWindow::MainWindow(QWidget *parent) :
154
172
155
173
ui->menuFile ->addAction (act_newFile);
156
174
ui->menuFile ->addAction (act_openFile);
175
+ ui->menuFile ->addMenu (menu_openRecentFile);
157
176
ui->menuFile ->addAction (act_saveFile);
158
177
ui->menuFile ->addAction (act_saveAsFile);
159
178
ui->menuFile ->addSeparator ();
@@ -216,7 +235,6 @@ MainWindow::MainWindow(QWidget *parent) :
216
235
}" );
217
236
218
237
219
-
220
238
setFileName (" " );
221
239
222
240
m_dirtyable = true ;
@@ -249,9 +267,22 @@ void MainWindow::setFileName(QString fileName)
249
267
else
250
268
{
251
269
m_windowTitle = fileName.mid (fileName.lastIndexOf (' /' ) + 1 );
270
+
271
+ // add new filename in recent files
272
+ QSettings settings;
273
+ QStringList files = settings.value (" recentFileList" ).toStringList ();
274
+ files.removeAll (fileName);
275
+ files.prepend (fileName);
276
+ while (files.size () > maxRecentFile)
277
+ files.removeLast ();
278
+
279
+ settings.setValue (" recentFileList" , files);
280
+
252
281
}
253
282
m_dirty = false ;
254
283
updateWindowTitle ();
284
+
285
+ updateRecentFileActions ();
255
286
}
256
287
257
288
void MainWindow::closeEvent (QCloseEvent *event)
@@ -350,18 +381,29 @@ void MainWindow::open()
350
381
351
382
QString fileName = QFileDialog::getOpenFileName (this , " Open Project" , " ." , " Project (*.proj)" );
352
383
353
- if (QFile::exists (fileName))
354
- {
355
- m_dirtyable = false ;
356
- qreal duration;
357
- ui->nodalView ->load (fileName, duration);
358
- m_signal.setDuration (duration);
359
- m_dirtyable = true ;
360
- setFileName (fileName);
361
- }
384
+ openFile (fileName);
385
+ }
386
+ }
387
+
388
+ void MainWindow::openRecent ()
389
+ {
390
+ QAction *action = qobject_cast<QAction *>(sender ());
391
+ if (action)
392
+ {
393
+ openFile (action->data ().toString ());
362
394
}
363
395
}
364
396
397
+ void MainWindow::clearRecentFiles ()
398
+ {
399
+ QSettings settings;
400
+ QStringList files = settings.value (" recentFileList" ).toStringList ();
401
+ files.clear ();
402
+ settings.setValue (" recentFileList" , files);
403
+
404
+ updateRecentFileActions ();
405
+ }
406
+
365
407
void MainWindow::about ()
366
408
{
367
409
QMessageBox box (QMessageBox::NoIcon, " About " + Utils::AppName,
@@ -446,6 +488,19 @@ void MainWindow::createMenus()
446
488
447
489
}
448
490
491
+ void MainWindow::openFile (QString fileName)
492
+ {
493
+ if (QFile::exists (fileName))
494
+ {
495
+ m_dirtyable = false ;
496
+ qreal duration;
497
+ ui->nodalView ->load (fileName, duration);
498
+ m_signal.setDuration (duration);
499
+ m_dirtyable = true ;
500
+ setFileName (fileName);
501
+ }
502
+ }
503
+
449
504
void MainWindow::saveFile (QString fileName)
450
505
{
451
506
setFileName (fileName);
@@ -465,3 +520,22 @@ void MainWindow::updateWindowTitle()
465
520
{
466
521
setWindowTitle (Utils::AppName + " [" + m_windowTitle + (m_dirty ? " *" : " " ) + " ]" );
467
522
}
523
+
524
+ void MainWindow::updateRecentFileActions ()
525
+ {
526
+ QSettings settings;
527
+ QStringList files = settings.value (" recentFileList" ).toStringList ();
528
+
529
+ int numRecentFiles = qMin (files.size (), maxRecentFile);
530
+
531
+ for (int i = 0 ; i < numRecentFiles; ++i) {
532
+ QString text = QString (" &%1 %2" ).arg (i + 1 ).arg (QFileInfo (files[i]).fileName ());
533
+ recentFileActs[i]->setText (text);
534
+ recentFileActs[i]->setData (files[i]);
535
+ recentFileActs[i]->setVisible (true );
536
+ }
537
+ for (int j = numRecentFiles; j < maxRecentFile; ++j)
538
+ recentFileActs[j]->setVisible (false );
539
+
540
+ menu_openRecentFile->setEnabled (numRecentFiles > 0 );
541
+ }
0 commit comments